svn 的使用(二)
這篇主要介紹下 svn 鉤子的使用,svn 的安裝以及配置等能夠查看 svn 的使用(一)
這里面就存放這個各種svn操作同一時候會運行的腳本文件。
(你能夠自己查看每一個腳本文件,文件開始都有英文的介紹包含功能,參數(shù)以及返回值。
?? 我翻譯的不好所以就採用網(wǎng)上其他資料的解釋吧 - -! )
1.start-commit? 開始提交的通知
輸入?yún)?shù):傳遞給你鉤子程序的命令行參數(shù),順序例如以下:
??? 1. 版本號庫路徑
??? 2. 已經(jīng)認證過的提交的username
它在提交事務(wù)產(chǎn)生前已執(zhí)行,通經(jīng)常使用來判定一個用戶是否有權(quán)提交。返回0表示認證通過。
2.pre-commit 在提交結(jié)束之前提醒
輸入?yún)?shù):傳遞給你鉤子程序的命令行參數(shù)。順序是:
???? 1. 版本號庫路徑
???? 2. 提交事務(wù)的名稱
在事務(wù)完畢提交之前執(zhí)行,通常這個鉤子是用來保護由于內(nèi)容或位置(比如。你要求全部到一個特定分支的提交必須包含一個bug追蹤的ticket號,或者是 要求日志信息不為空)而不同意的提交。
無錯誤返回0。
?
3.post-commit? 成功提交的通知
傳遞給你鉤子程序的命令行參數(shù)。順序為:
???? 1. 版本號庫路徑
???? 2. 提交創(chuàng)建的修訂版本
它在事務(wù)完畢后執(zhí)行,創(chuàng)建一個新的修訂版本號。無錯誤程序正常退出。
?
4.pre-revprop-change 版本號屬性改動
由于Subversion的修訂版本號屬性不是版本號化的,對這類屬性的改動(比如提交日志屬性svn:log)將會永久覆蓋曾經(jīng)的屬性值。由于數(shù)據(jù)在此可能 丟失。所以Subversion提供了這樣的鉤子(及與之相應(yīng)的post-revprop-change),因此版本號庫管理員可用一些外部方法記錄變化。
作 為對丟失未版本號化屬性數(shù)據(jù)的防范。Subversionclient不能遠程改動修訂版本號屬性,除非為你的版本號庫實現(xiàn)這個鉤子。
5.post-revprop-change 版本號屬性改動
這個鉤子與pre-revprop-change相應(yīng)。
其實,由于多疑的原因,僅僅有存在pre-revprop-change時這個腳本才會執(zhí)行。當(dāng)這 兩個鉤子都存在時。post-revprop-change在修訂版本號屬性被改變之后執(zhí)行,通經(jīng)常使用來發(fā)送包括新屬性的email。版本號庫傳遞四個參數(shù)給該 鉤子:到版本號庫的路徑,屬性存在的修訂版本號。經(jīng)過校驗的產(chǎn)生變化的username,和屬性自身的名字。
使用這些鉤子最簡單的方法就是
拷貝某個腳本,去掉.tmpl擴展名,然后自己定義鉤子的內(nèi)容,確定腳本是可執(zhí)行的。
PS:一定要確保鉤子腳本是可運行的。
并且名稱就是去掉.tmpl后的名字。
另外要注意要使用SVN的鉤子一定要開設(shè)權(quán)限,并且是要用執(zhí)行SVN的賬號進行執(zhí)行這些鉤子
(假設(shè)不是能夠執(zhí)行的會提示錯誤,錯誤代碼為255。其它錯誤能夠自行嘗試。。)
我想要做的就是 用戶commit 后server(測試環(huán)境的)自己主動同步 即做update操作
這里我的webserver和svnserver 在一臺。(假設(shè)是遠程的webserver能夠在
先使用ssh命令登入
)
那么我們須要使用的鉤子是post-commit
我們能夠使用命令
cp post-commit.tmpl post-commit.tmpl.bak
mv post-commit.tmpl post-commit
(別忘了 chmod 設(shè)置為可運行的)
chmod 755 post-commit
vi post-commit
這里我們能夠先做一個測試
即在文件最后加上一行
/bin/echo "commit" >> /tmp/commit.out
然后運行commit 操作 看一下 commit.out 是不是多了 commit這個單詞
那么編寫我們的腳本在post-commit 文件最后加入命令
/usr/bin/svn update /www/project --username m0sh1 --password m0sh1
PS:這里要 加上絕對路徑 , update 后面的是checkout 下來的項目路徑
假設(shè)提示錯誤 svn: Can't convert string from native encoding to 'UTF-8'
則須要加入一行命令
export lang = en_US.UTF-8
此時去工作文件夾看下是不是更新了。。
再舉個樣例,有非常多開發(fā)者為了快,往往忽略掉提交日志信息(也可能無意為之)。那么我們能夠在pre-commit腳本
中做出必須提交日志信息的限制:
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
?? grep "[a-zA-Z0-9]" > /dev/null || exit 1
# Check that the author of this commit has the rights to perform
# the commit on the files and directories being modified.
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
# All checks passed, so allow the commit.
exit 0
(上面內(nèi)容直接就是pre-commit腳本中的內(nèi)容,那么僅僅須要給pre-commit可運行的權(quán)限就能夠了。)
之后我們就能夠以此,類推出其他想要實現(xiàn)的功能了。
總結(jié)
以上是生活随笔為你收集整理的svn 的使用(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux超级终端配置交换机路由器
- 下一篇: 如何零基础入门产品经理