有時候需要對之前版本提交的錯誤的日志信息進行修改或者進行補充描述:
1、在windows 7( 64位 )下使用TortoiseSVN客戶端,選中代碼目錄,點擊右鍵,選擇<顯示日志>
在出來的日志列表對話框中,選擇某個提交版本,再點擊右鍵,選擇<編輯日志信息>,如下圖所示:
我們修改原來空白的日志信息
萬惡報錯信息出現了
這個時候怎么處理呢??難道SVN不愛我們了!!
由於缺省情況下為安全起見Subversion不允許開發人員修改已提交reversion的日志信息,這樣會報錯誤,提示不能修改以及請SVN管理員安裝pre revprop change hook。
visualSVN Server每個Repositories下都有一個hooks文件夾,如下圖,已經有一堆tmpl文件,這些文件其實就是linux 的shell腳本模板。
我們先打開pre-revprop-change.tmpl來看看,pre-revpro-change.tmpl就是linux版的pre-revprop-change hook
的模板,在linux下賦予執行權限就可以使用。
1 #!/bin/sh 2 3 # PRE-REVPROP-CHANGE HOOK 4 # 5 # The pre-revprop-change hook is invoked before a revision property 6 # is added, modified or deleted. Subversion runs this hook by invoking 7 # a program (script, executable, binary, etc.) named 'pre-revprop-change' 8 # (for which this file is a template), with the following ordered 9 # arguments: 10 # 11 # [1] REPOS-PATH (the path to this repository) 12 # [2] REV (the revision being tweaked) 13 # [3] USER (the username of the person tweaking the property) 14 # [4] PROPNAME (the property being set on the revision) 15 # [5] ACTION (the property is being 'A'dded, 'M'odified, or 'D'eleted) 16 # 17 # [STDIN] PROPVAL ** the new property value is passed via STDIN. 18 # 19 # If the hook program exits with success, the propchange happens; but 20 # if it exits with failure (non-zero), the propchange doesn't happen. 21 # The hook program can use the 'svnlook' utility to examine the 22 # existing value of the revision property. 23 # 24 # WARNING: unlike other hooks, this hook MUST exist for revision 25 # properties to be changed. If the hook does not exist, Subversion 26 # will behave as if the hook were present, but failed. The reason 27 # for this is that revision properties are UNVERSIONED, meaning that 28 # a successful propchange is destructive; the old value is gone 29 # forever. We recommend the hook back up the old value somewhere. 30 # 31 # On a Unix system, the normal procedure is to have 'pre-revprop-change' 32 # invoke other programs to do the real work, though it may do the 33 # work itself too. 34 # 35 # Note that 'pre-revprop-change' must be executable by the user(s) who will 36 # invoke it (typically the user httpd runs as), and that user must 37 # have filesystem-level permission to access the repository. 38 # 39 # On a Windows system, you should name the hook program 40 # 'pre-revprop-change.bat' or 'pre-revprop-change.exe', 41 # but the basic idea is the same. 42 # 43 # The hook program typically does not inherit the environment of 44 # its parent process. For example, a common problem is for the 45 # PATH environment variable to not be set to its usual value, so 46 # that subprograms fail to launch unless invoked via absolute path. 47 # If you're having unexpected problems with a hook program, the 48 # culprit may be unusual (or missing) environment variables. 49 # 50 # Here is an example hook script, for a Unix /bin/sh interpreter. 51 # For more examples and pre-written hooks, see those in 52 # the Subversion repository at 53 # http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and 54 # http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ 55 56 57 REPOS="$1" 58 REV="$2" 59 USER="$3" 60 PROPNAME="$4" 61 ACTION="$5" 62 63 if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi 64 65 echo "Changing revision properties other than svn:log is prohibited" >&2 66 exit 1
VisualSVN server運行在Windows平台,所以這些hook腳本是不可能能執行的。但只要照着這些hook模板代碼的邏輯用bat腳本重寫這些腳本,就可以實現windows下的hook.
pre-revprop-change.bat代碼如下
1 setlocal 2 set REPOS=%1 3 set REV=%2 4 set USER=%3 5 set PROPNAME=%4 6 set ACTION=%5 7 if not "%ACTION%"=="M" goto refuse 8 if not "%PROPNAME%"=="svn:log" goto refuse 9 goto OK 10 :refuse 11 echo Cann't set %PROPNAME%/%ACTION%, only svn:log is allowed 1>&2 12 endlocal 13 exit 1 14 :OK 15 endlocal 16 exit 0
好了現在重新開始測試
難道SVN不愛我們了嗎,不是,原來是我們不懂SVN的心
小技巧
如果不想在中添加bat文件該怎么弄
將之前的 pre-revprop-change.bat中內容直接復制到這個里
好了我們還是測試一下吧