我想爲svn編寫一個post commit鉤子腳本來將倉庫導出到團隊基礎服務器。 (所以當你提交代碼時,代碼的最新版本會被複制到團隊基礎倉庫中)如何編寫一個svn鉤子腳本
我使用的語言只有C++和C,我從來沒有寫過腳本。有人能給我一步一步的指導嗎?使用哪種語言,讀什麼等......以及一些示例代碼可能?
是否可以使用C++編寫鉤子腳本?或者我應該學習如何使用Python或Ruby等。
我想爲svn編寫一個post commit鉤子腳本來將倉庫導出到團隊基礎服務器。 (所以當你提交代碼時,代碼的最新版本會被複制到團隊基礎倉庫中)如何編寫一個svn鉤子腳本
我使用的語言只有C++和C,我從來沒有寫過腳本。有人能給我一步一步的指導嗎?使用哪種語言,讀什麼等......以及一些示例代碼可能?
是否可以使用C++編寫鉤子腳本?或者我應該學習如何使用Python或Ruby等。
如果您願意,可以使用C或C++編寫鉤子。大多數人使用Perl或Python。
最主要的是svnlook
應該用在你的鉤子腳本中而不是svn
。 svnlook比svn
更快更安全。事實上,在預提交腳本中,由於您沒有存儲庫修訂版,您必須使用svnlook
。
這裏有一些事情要記住你的post-commit
鉤:
pre-commit
掛鉤,如果開發人員做得不對,它會失敗。post-commit
掛鉤時,PATH
環境變量已被刪除。如果您需要訪問其他命令或文件,則必須自行提供完整路徑。ARGV
中找到這些參數。兩個參數將傳遞給您:
svnlook
命令)。一切你必須推斷雖然svnlook
(你可以通過system
命令來運行。但是,因爲你實際編寫C和C++的東西,你也許可以使用內置的Subversion API )。
另一種可能性:使用像Jenkins這樣的連續構建系統來爲你做髒活。您可能會發現通過Jenkins工作起來更容易,而不必擔心後提交掛鉤如何完成此任務。 Jenkins的優點之一是,當事情出錯時,您不會將失敗的提交後消息發回給用戶(可能沒有錯)。相反,您可以對發生的事情進行完整記錄,並提醒可以真正解決問題的人員。
這是我寫的Perl的一個sample of one。不知道它會對你有什麼好處。
我們正在考慮使用Jenkins或Team Foundation服務器,如果我們使用團隊基礎服務器,我們需要同步svn和TFS,這就是爲什麼我正在考慮post-commit hook。有沒有一種方法可以爲團隊基礎服務器(svn - 團隊基礎服務器)使用同步功能?並感謝您的深刻回覆 – kiki 2012-03-19 17:32:06
@kiki - 實際上,您可以使用Jenkins來完成更多的任務,有時甚至不會將它用於構建。我只是想在這種情況下使用Jenkins只是爲了在Subversion和TeamFoundation之間進行同步。 – 2012-03-19 18:02:41
你可以找到關於如何定義這裏pre-commit鉤子說明: http://wordaligned.org/articles/a-subversion-pre-commit-hook
的承諾後是類似的指令創建。
將提交後的模板複製到新文件後,您可以簡單地添加一行來調用您用C++編寫的程序,並將參數傳遞給您的程序。
這取決於您的工作,但大多數情況下使用腳本語言作爲shell腳本或python來完成您的工作可以節省更多的時間。
是否存在將結果導出到其他位置或將代碼複製到其他位置(備份)的現有提交後掛鉤? – kiki 2012-03-19 16:52:47
是的,在svn源代碼中有一個模板:http://svn.apache.org/repos/asf/continuum/trunk/continuum-release/src/test/scm/hooks/post-commit.tmpl現在你有版本庫和版本,你可以簡單地調用'svn'來獲得你需要的所有提交信息。 – devsnd 2012-03-19 16:54:40
我想我需要實際編寫腳本的幫助。有沒有我可以閱讀或看的好資源?用小例子來嘗試它並獲得它的感覺? – kiki 2012-03-19 17:11:45
這是一個計算器的答案在這裏與在Windows post-commit鉤子的樣本,採用原生Windows shell命令 - https://stackoverflow.com/a/3630534/7984
首先,[答案已經可以在這裏(http://stackoverflow.com/questions/139315 /可-i的運行-A-腳本時-I-提交到顛覆)。其次:不。它不一定是一個「腳本」。任何與可執行位的作品。你也可以用C或C++編寫鉤子。 – 2012-03-19 16:16:39