2009-11-19 73 views
2

什麼是最好的方式(如果有)修改一個特定的文件我們的倉庫內post_commit 修改svn中的鉤子腳本文件

如:我想校驗行追加到somefile.conf文件

+0

好吧,也許post_commit鉤子是不適合做這種修改的地方...但也許在pre_commit? – 2009-11-19 13:22:42

+0

@Carlo:預先提交肯定是錯誤的,因爲您不得更改正在簽入的文件。請參閱我的答案。 – sbi 2009-11-20 09:20:13

回答

2

不要在掛鉤中完成此操作 - 在單獨的更改中執行此操作,以便該分支的其他用戶可以將其拖放到其工作副本中。它並不需要比這更復雜(在僞代碼):

  • 腳本從信息庫中的工作拷貝到本地目錄
  • 腳本修改文件
  • 腳本承諾具有良好的提交信息文件「例如,‘foo腳本:添加校驗和’

它的情況並不少見構建腳本(在cron下運行,或通過一個Makefile觸發)的基礎上的其他文件進行定期修訂的庫,例如再生文件有時這些。被檢入到存儲庫中有時它們不是,取決於誰使用這些文件以及如何使用這些文件。

+0

這就是*我正在做的事情。問題在於何時更合適。在post_commit似乎是合理的原因,我不是「變形」的實際交易,只添加sometinhg後:)。 而且,是的,腳本應該在自己的回購工作副本上執行。 TNX – 2009-11-20 11:04:15

4

您可能需要閱讀SVN書的this chapter。在它的盡頭,有一個漂亮的紅色方塊以下警告:

雖然鉤子腳本幾乎可以做任何事情,有一個維度中,鉤子腳本作者應該表現出剋制:不修改提交事務使用鉤子腳本。雖然使用鉤子腳本自動糾正提交文件中存在的錯誤,缺陷或策略違規可能很誘人,但這樣做可能會導致問題。 Subversion保留了某些數據庫數據的客戶端緩存,並且如果以這種方式更改提交事務,這些緩存將變得無法檢測。這種不一致會導致令人驚訝和意外的行爲。您不應該修改事務,而應該簡單地在預提交掛鉤中驗證事務,並在它不符合所需要求時拒絕提交。作爲獎勵,您的用戶將會學習到認真遵守法規的工作習慣的價值。

+0

謝謝,我讀過它..但是我問(主要是我自己)是否可以實施一些工作 - 阿羅努。 這樣一個post_commit鉤子可以調用腳本: 1.在repo的工作副本上發出svn更新 2.相應地應用其更改(校驗和等) 3.發出svn commit -m「校驗加bla bla ...「 你認爲這是可行的/合適的嗎? – 2009-11-19 13:35:38

+0

也許,我不知道。坦率地說,我會在SVN郵件列表中提問。 – sbi 2009-11-19 16:29:06

+0

你可以在post commit hook中做你所說的話,只要知道它會在repository中添加一個額外的修訂版本,並且原來的committer也需要進行更新以獲取更改。 – 2009-11-19 18:09:40

1

在post commit鉤子中做你的建議沒有問題,但要知道它會向存儲庫添加一個新的修訂版本,並且原始提交者在看到更改之前需要進行更新劇本。 它還會在提交操作返回之前運行後提交速度變慢。