svn修改提交路径_使用SVN钩子强制提交日志和限制提交文件类型
Subversion本身有很好的擴(kuò)展性,用戶可以通過(guò)鉤子實(shí)現(xiàn)一些自定義的功能。所謂鉤子實(shí)際上是一種事件機(jī)制,當(dāng)系統(tǒng)執(zhí)行到某個(gè)特殊事件時(shí),會(huì)觸發(fā)我們預(yù)定義的動(dòng)作,這樣的特殊事件在Subversion里有很多。那么SVN的鉤子有哪些呢?下面簡(jiǎn)單介紹下:
服務(wù)器鉤子:
鎖定的2種
pre-lock
鉤子在每次有人嘗試鎖定文件時(shí)執(zhí)行。可以防止完全鎖定,或者用來(lái)創(chuàng)建控制哪些用戶可以鎖定哪些路徑的復(fù)雜策略。如果鉤子發(fā)現(xiàn)已存在鎖,也可以決定是否允許用戶“竊取”這個(gè)鎖。
post-lock
在路徑鎖定后執(zhí)行。通常用來(lái)發(fā)送鎖定事件郵件通知。
解鎖的2種
pre-unlock
鉤子在某人企圖刪除一個(gè)文件上的鉤子時(shí)發(fā)生。可以用來(lái)創(chuàng)建哪些用戶可以解鎖哪些文件的策略。制定解鎖策略非常重要。如果用戶 A 鎖定了一個(gè)文件,允許用戶B 打開(kāi)這個(gè)鎖?如果這個(gè)鎖已經(jīng)一周了呢?這種事情可以通過(guò)鉤子決定并強(qiáng)制執(zhí)行。
post-unlock
在一個(gè)或多個(gè)路徑已經(jīng)被解鎖后執(zhí)行。通常用來(lái)發(fā)送解鎖事件通知郵件。
提交的3種
start-commit
它在提交事務(wù)產(chǎn)生前已運(yùn)行,通常用來(lái)判定一個(gè)用戶是否有權(quán)提交。版本庫(kù)傳給該程序兩個(gè)參數(shù):到版本庫(kù)的路徑,和要進(jìn)行提交的用戶名。如果程序返回一個(gè)非零值,會(huì)在事務(wù)產(chǎn)生前停止該提交操作。如果鉤子程序要在stderr中寫入數(shù)據(jù),它將排隊(duì)送至客戶端。
pre-commit
在事務(wù)完成提交之前運(yùn)行,通常這個(gè)鉤子是用來(lái)保護(hù)因?yàn)閮?nèi)容或位置(例如,你要求所有到一個(gè)特定分支的提交必須包括一個(gè)bug追蹤的ticket號(hào),或者是要求日志信息不為空)而不允許的提交。版本庫(kù)傳遞兩個(gè)參數(shù)到程序:版本庫(kù)的路徑和正在提交的事務(wù)名稱,如果程序返回非零值,提交會(huì)失敗,事務(wù)也會(huì)刪除。如 果鉤子程序在stderr中寫入了數(shù)據(jù),也會(huì)傳遞到客戶端。
post-commit
它在事務(wù)完成后運(yùn)行,創(chuàng)建一個(gè)新的修訂版本。大多數(shù)人用這個(gè)鉤子來(lái)發(fā)送關(guān)于提交的描述性電子郵件,或者作為版本庫(kù)的備份。版本庫(kù)傳給程序兩個(gè)參數(shù):到版本庫(kù)的路徑和被創(chuàng)建的新的修訂版本號(hào)。退出程序會(huì)被忽略。
屬性的2種
pre-revprop-change
因?yàn)镾ubversion的修訂版本屬性不是版本化的,對(duì)這類屬性的修改(例如提交日志屬性svn:log)將會(huì)永久覆蓋以前的屬性值。因?yàn)閿?shù)據(jù)在此可能 丟失,所以Subversion提供了這種鉤子(及與之對(duì)應(yīng)的post-revprop-change),因此版本庫(kù)管理員可用一些外部方法記錄變化。作 為對(duì)丟失未版本化屬性數(shù)據(jù)的防范,Subversion客戶端不能遠(yuǎn)程修改修訂版本屬性,除非為你的版本庫(kù)實(shí)現(xiàn)這個(gè)鉤子。
post-revprop-change
這個(gè)鉤子與pre-revprop-change對(duì)應(yīng)。事實(shí)上,因?yàn)槎嘁傻脑?#xff0c;只有存在pre-revprop-change時(shí)這個(gè)腳本才會(huì)執(zhí)行。當(dāng)這 兩個(gè)鉤子都存在時(shí),post-revprop-change在修訂版本屬性被改變之后運(yùn)行,通常用來(lái)發(fā)送包含新屬性的email。版本庫(kù)傳遞四個(gè)參數(shù)給該 鉤子:到版本庫(kù)的路徑,屬性存在的修訂版本,經(jīng)過(guò)校驗(yàn)的產(chǎn)生變化的用戶名,和屬性自身的名字。
客戶端鉤子:
提交的
start commit hook
pre-commit hook
post-commit hook
更新的
start update hook
pre-update hook
post-update hook
今天研究了一下如何使用SVN鉤子強(qiáng)制提交日志和限制提交文件類型。這次我們用到的是服務(wù)端鉤子pre-commit。網(wǎng)上有篇文章使用jscript來(lái)實(shí)現(xiàn)這個(gè)功能:http://blog.csdn.net/caikanxp/article/details/8279921。我測(cè)試過(guò)該文章,發(fā)現(xiàn)提交限制文件時(shí)確實(shí)有效,但是提交正常的源碼文件時(shí)卻陷入一種類似死循環(huán)的等待中。我的測(cè)試環(huán)境是:客戶端 Win XP + sp3,服務(wù)器端:WinServer2008 Enterprise。
為此只好自己參考網(wǎng)上的代碼自己寫了一下,代碼如下:
?
@echo rem SVN強(qiáng)制寫注釋的hooks腳本(Windows)rem 文件名是: pre-commit.bat,放到repository/hooks目錄下setlocalset SVN_BINDIR="C:Program Files (x86)SlikSvnbin"set REPOS=%1set TXN=%2rem 檢查是否提交日志%SVN_BINDIR%svnlook log -t "%TXN%" "%REPOS%" | findstr "......" > nulif %errorlevel% gtr 0 goto nologrem 過(guò)濾文件類型%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "obj$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "pdb$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "idb$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "manifest$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "pch$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "res$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "exp$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "ilk$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "dep$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "user$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "suo$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "ncb$"if %errorlevel% EQU 0 (goto SuffixError)%SVN_BINDIR%svnlook changed -t "%TXN%" "%REPOS%" | findstr "aps$"if %errorlevel% EQU 0 (goto SuffixError)exit 0:SuffixErrorecho 請(qǐng)不要提交受限制的文件類型,如:obj、pdb、exp、ilk等等,謝謝! 1>&2exit 1:nologecho 日志(Message)是跟蹤文檔的重要信息,必須輸入,不得輸入無(wú)意義字符,長(zhǎng)度不得小于6個(gè)字符。 1>&2exit 1? 簡(jiǎn)單說(shuō)明下:SVN_BINDIR路徑為你的SVN服務(wù)端程序所在的目錄,svnlookchanged -t "%TXN%" "%REPOS%" | findstr "obj$"為比較你提交的文件是否為obj文件(即后綴是否為obj)。
? 部署方式是將上面的批處理代碼保存在pre-commit.bat(必須是這個(gè)名字),然后把它放到服務(wù)端的版本庫(kù)的hooks文件夾下。該腳本經(jīng)測(cè)試有效,測(cè)試環(huán)境為客戶端 Win XP + sp3,服務(wù)器端:Win Server2008 Enterprise。
總結(jié)
以上是生活随笔為你收集整理的svn修改提交路径_使用SVN钩子强制提交日志和限制提交文件类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python 开运算_形态学去噪pyth
- 下一篇: viterbi算法_HMM模型和Vite