Posted on 2010-10-14 10:31
幻海藍夢 閱讀(1352)
評論(0) 編輯 收藏 所屬分類:
版本管理
我想用過Subversion的人一定有過這樣的問題:“為什么不允許用戶修改日志?”,因為這種改變不可還原(目前這個操作還沒有受到版本控制 的管理),所以這項功能默認是被禁止的。如果要開啟它,必須設(shè)置一個pre-revprop-change鉤子。
版本庫生成后,hooks目錄下就存在一些鉤子腳本的模板,用戶可以作為參考。這里我們可以把已經(jīng)存在的pre-revprop- change.tmpl復制一份,將復制后的文件名改為pre-revprop-change.bat,鉤子就設(shè)置好了。注意Windows下鉤子腳本必 須以.bat或者.exe的擴展名形式存在。
默認的鉤子模板使用的是linux下的腳本語言,不能在Windows下運行。所以我們必須重寫,這里介紹用批處理文件來寫鉤子腳本的方法。最簡 單的允許修改日志的pre-revprop-change.bat連一行都不需要,直接把pre-revprop-change.bat的內(nèi)容清空就行 了,因為按照Subversion的約定,鉤子腳本返回0就是允許修改任何屬性。(關(guān)于鉤子腳本的約定可參考這篇文章 http://blog.donews.com/foxgem/archive/2005/11/03/613854.aspx)
但是假如我們希望作些判斷,比如只允許修改日志,而不允許修改用戶名或者其他屬性,那么下面是一個范例:
SET REPOS="%1"
SET REV="%2"
SET USER="%3"
SET PROPNAME="%4"
SET ACTION="%5"
IF %ACTION% == "M" (IF %PROPNAME% == "svn:log" (EXIT 0))
ECHO "Changing revision properties %PROPNAME% is prohibited" >&2
EXIT 1
利用Subversion的一個程序svnlook,腳本中可以訪問的信息就不僅僅只有傳遞進來的5個參數(shù)了,從而可以實現(xiàn)更多的功能。比如判斷 修改日志的用戶是不是以前進行提交的那個作者,如果不是就不允許修改。
只允許用戶修改自己的svn日志的鉤子腳本:
for /f "usebackq" %%k in (`svnlook author %1 -r%2`) do @set var=%%k
if "%3" == "%var%" goto test
if "%3" == "li" goto test
exit 1
:test
if "%4" == "svn:log" exit 0
echo Property '%4' cannot be changed >&2
exit 1
實現(xiàn)每人可以修改自己的log日志,而管理員li可以任意修改。這個例子是從網(wǎng)上摘抄來的,因為手頭上缺少svnlook,所以沒有進行測試。
----------------------------------------------------------------------
Subversion提交強制寫日志(windows)
在每次提交的時候?qū)懨魈峤坏哪康氖且粋€很好的習慣,Subversion默認沒有提供,但是可以通過鉤子實現(xiàn):
將下面的代碼存為pre-commit.bat放到版本庫的hooks目錄下即可,當你不寫日志提交的話就會報告錯誤。(如果你下載使用,需要修 改SVN_BINDIR為你的Subversion安裝的程序目錄)
@echo off
set SVN_BINDIR=d:\Subversion\bin
setlocal
set REPOS=%1
set TXN=%2
rem check that logmessage contains at least 10 characters
%SVN_BINDIR%\svnlook log "%REPOS%" -t "%TXN%" | findstr ".........." > nul
if %errorlevel% gtr 0 goto err
exit 0
:err
echo Empty log message not allowed. Commit aborted! 1>&2
exit 1
原文:http://hi.baidu.com/ayifa/blog/item/0d0fda16d0450d14972b43b3.html