2009-10-01 17 views
2

我試圖設置一個特定的工作流,但無法弄清楚rsync如何(或如果)將爲此工作。試圖讓rsync將文件複製回svn

我的設置是在Mac OS X.

我有我的SVN目錄。當我運行我的部署腳本時,這些文件被移到我的集成A​​pache服務器上。我對這些文件執行修改,然後手動將它們複製回SVN。

我這樣做的原因是我需要馬上看到瀏覽器中的變化,因爲我在編輯html,css和javascript。但是,它耗費時間試圖手動複製並跟蹤這一點,我想將其自動化。

我想要做的是使用rsync來確定我在Apache Web目錄中修改的文件,然後將這些文件僅複製回SVN。

我有一個rsync命令,我一直在測試,但我似乎遇到的問題是,由於部署文件的時間戳比SVN中的內容都新,rsync想要將所有文件都複製回來因爲它將它們視爲較新的文件。

我也試驗過差異,它檢測到文件差異。我想我可以把一個shell腳本放在一起,可以使用diff,grep和cp的組合來完成這個工作,但我想看看rsync是否可以是一個全功能的解決方案。

rsync -avuzn --exclude=web-inf/classes/ --exclude=web-inf/lib/ /var/www/web-inf /usr/local/src/svn/WEB-INF 
+0

*免責聲明:講的東西我寫* FWIW,這是非常類似我的自動部署系統:http://www.mirios.com.au/dashy/(但它可能對您沒有用處,因爲它現在是基於Windows的),就像有人提到的那樣,在編寫系統時,您應以不同的方式處理「本地」測試(因此您可以立即看到更改)。 – 2009-10-02 02:38:47

回答

3

我建議在網絡服務器上有一個顛覆性簽出權。您應該爲名爲.svn的所有Files添加Deny指令,以便遠程用戶不會將其識別爲顛覆性簽出。

0

您沒有說您的部署腳本如何將文件移動到集成服務器,並且不清楚是否涉及多臺計算機或集成服務器文件位於何種文件系統。如果腳本執行正確,那麼當文件最初發送時,您可能會保留文件的修改時間。既然你可以使用rsync把它們帶回來,你不能也使用rsync來發送它們嗎?除此之外,scp -p是另一種傳輸方式,同時保留了許多屬性。

儘管這種工作流程聽起來是爲分佈式版本控制系統量身定做的,如mercurialgit

0

我在這裏不明白的是你究竟在做什麼?一般來說,你應該在自己的電腦上開發。您的svn存儲庫應位於您的Sites目錄中,以便您可以通過本地主機在您的瀏覽器中查看該網站。我以同樣的方式使用Rait和git。我的本地紅寶石服務器去localhost:3000,我可以開發並不斷看到我在做什麼。然後,當我的代碼碰到一個不錯的點時,我承諾將git部署到我的測試服務器。一旦網站完成,它就會進入生產環境。當我在php/mysql中編寫代碼時,我會在自己的本地apache服務器上進行測試,然後在完成時直接將ftp發送到測試服務器或生產服務器。

這就是你應該如何工作。沒有理由從測試或生產服務器複製東西。你的版本控制系統應該做所有的同步。 本地開發,遠程測試然後部署到生產環境。這是做到這一點的最佳方式。

0

我也嘗試過自動部署,並在我編寫了自己的rsync腳本之後...(易於使用,但苛刻的安裝,我碰到DeployIt來......試試吧...

http://deployit.monavari.de/