2010-12-01 123 views
0

我在Windows機器上運行SVN回購協議。我需要一個腳本將任何提交的文件上傳到遠程Web服務器。我已經閱讀了預先提交的鉤子,但我不知道如何實際編寫腳本,甚至不知道應該使用哪種語言編寫腳本。似乎腳本需要運行.bat或.exe才能運行在窗口中。SVN預先掛鉤FTP在Windows上載

有沒有人有腳本可以在Windows機器上運行?我不打算上傳整個網站,而是上傳個人文件。我想要一個預先提交的鉤子,因爲如果ftp上傳失敗,會給用戶反饋。

如果您之前已經完成了此操作,請將整個過程解釋爲newb。

回答

1

我認爲你需要一個post-commit鉤子。

一個svn鉤子確實可以是任何可執行文件或腳本文件。 Look here for some samples

您可以在Windows上使用內置的命令行ftp客戶端。一種方法是將您的FTP命令放入一個文本文件中,您可以從批處理文件中生成該文件。例如:

echo [username]>ftp.txt 
echo [password]>>ftp.txt 
echo put [filename]>>ftp.txt 
echo quit>>ftp.txt 

ftp -s:ftp.txt [server] 

當然,你也可以編寫一個程序來做到這一點(例如在.NET中,使用FtpWebRequest類),它並沒有成爲一個批處理腳本。

+0

不,我需要預先提交。否則,FTP上傳失敗,但提交,我搞砸了。 – Liquidgraph 2010-12-01 22:01:31

+0

這些樣本都不涉及FTP上傳。另外,你可以詳細說明如何通過鉤子腳本在windows中使用內置命令行ftp客戶端嗎? – Liquidgraph 2010-12-01 22:03:02

3

當您希望因某種原因導致提交失敗時,使用預提交掛鉤。你真的想失敗一個提交是因爲你的FTP站點已關閉,或磁盤已滿?

您應該只使用預先提交腳本來處理由開發人員控制的東西,例如缺少所需屬性的文件等。這使開發人員有機會糾正問題,然後重新提交提交。

當用戶的終端等待它完成時,post-commit腳本仍然會綁定用戶的終端,但是腳本可能會失敗並通知用戶某些事情失敗了,但無論如何都會發生提交。如果你想用鉤子來做到這一點,你應該使用post-commit鉤子而不是預先提交鉤子來完成它。


對於你想做的事情,鉤子並不是一個好的方法。如果用戶提交大量文件會怎麼樣?當你的鉤子腳本執行時,他們必須坐在那裏十幾分鍾嗎?

一個更好的主意是使用像Hudson這樣的連續構建系統。 Hudson會觀察你的Subversion版本庫,並且可以在用戶每次提交時執行你想要的FTP任務。有了Hudson,在開發者等待掛鉤完成時你並沒有被捆綁在一起,並且你可以完整記錄每一次提交的情況。

事實上,每個網站都應該使用連續構建服務器。即使你不編碼編碼,你仍然想對每個提交運行測試。

哈德森甚至有FTP和SFTP插件,這可能會使您的任務更容易做到。而且,您可以在Hudson中調用預生成和後生腳本,這樣您就可以靈活地執行您的心願。

Hudson在Windows服務器和Unix服務器上運行。這是一個Java過程。


如果您使用的是Windows,和你沒有PowerShell的,你應該下載一些腳本語言,你用它來寫你的鉤子。 Windows command.exe處理器中的標準批處理編程語言不是非常靈活或強大。由於鉤子在服務器上運行,所以只需要擔心鉤子是否在單臺機器上運行。某些程序使用客戶端鉤子,如果您編寫鉤子,它必須能夠在客戶端可能使用的每個單一系統上運行。