2010-08-04 88 views
1

我試圖讓Subversion在提交時自動部署當前的工作副本。Subversion失敗後提交掛鉤?

例如,如果某人簽出'public_html'回購並提交更改,我需要SVN在運行svn的服務器上自動運行'svn update/path/to/public_html /'。

我已經成立了一個post-commit鉤子調用:

在/ usr/bin中/ SVN更新/路徑/到/的public_html/

我已經確保提交後鉤子是可執行的,如果我通過SSH手動運行腳本,它會正常運行並更新/ path/to/public_html/dir,因此我們知道提交後腳本正常工作。

我現在遇到的問題是,每當我承諾,我得到這個錯誤:

Transmitting file data .svn: Commit failed (details follow): 
svn: MERGE of '/svn/public_html': 200 OK (http://ourdomain.com) 

事情是,SVN躺在通過它的牙齒:提交其實沒有失敗 - 如果我手動更新dir(或手動運行提交後腳本)更新完成,並且更改將反映在服務器上。

那麼,有誰知道爲什麼我的後提交掛鉤失敗?

我已經看過這篇文章的一些帖子,但似乎沒有任何解決辦法,除了「嘗試運行後提交腳本手動」,我試過了,它工作正常..所以,提交腳本不是問題,它似乎是SV​​N本身的問題。

任何幫助將不勝感激!

+0

這並不直接回答你的問題,所以我將它包含在評論中而不是答案中 - 我建議不要直接在svn存儲庫中運行你的公共http服務器內容。相反,您應該使用構建和部署腳本,將腳本和內容打包並將其移至發佈位置。自動搭配提交聲音特別可怕 - 如果有人檢查代碼錯誤或寫入中的粗魯錯字會怎麼樣?你永遠沒有機會在他們上線之前測試這些變化。 – Ether 2010-08-04 22:09:48

回答

1

你必須知道,在鉤子腳本中沒有環境存在..這意味着你必須在你的腳本中使用絕對路徑而不是命令,因爲你也沒有路徑。 您確定要使用post-commit,因爲post-commit不能失敗,只有提交前提交和啓動提交可以做這樣的事情。

+0

+1,退出代碼和提交後的輸出應該被svn忽略。 – Wrikken 2010-08-04 20:14:45

+0

謝謝,是的,即使SVN說它失敗,提交仍然成功,它只是失敗後的提交後鉤子本身。 我知道沒有環境。腳本的內容是: --- #/ bin/sh的 在/ usr/bin中/ SVN更新/web/ourdomain.com/dev/public_html --- – 1337ingDisorder 2010-08-06 17:35:11

0

檢查svn服務器進程的userid在/ path/to/public_html /上是否有足夠的權限來寫入文件和目錄。

另一個想法:它還需要訪問自己的存儲庫,如工作副本「/ path/to/public_html /」中所述。如果您使用svn + ssh或http協議,則可能需要將其更改爲文件協議 - 無論如何,它都位於同一臺服務器上。

+0

權限都OK。 我不知道你可以使用file更新簽出的回購副本:// 所以如果路徑是/web/ourdomain.com/dev/public_html/我可以使用file:/// web /ourdomain.com/dev/public_html/而不是原始路徑,SVN會以不同的方式對待它? – 1337ingDisorder 2010-08-06 17:36:34

+0

使用''svn開關''或''svn開關--relocate'' – 2010-08-18 12:33:09

+0

不是我不會使用工作副本作爲公共html根目錄,而是導出(通過「svn導出」),因爲這將消除這些「。 svn /「目錄條目。 – 2010-08-18 12:37:01