為了維護svn的log,方便後續查詢某個模組的svn提交操作,今天終於動手寫了一次svn的hook指令碼。雖說功能不複雜,但是經歷還是有點波折。特此記錄
目標:輸入的注釋要遵照格式:[模組名]操作日誌,其中模組名不少於4個字元(或2個漢字),操作日誌不少於10個字元(或5個漢字)
由於公司的svnserver是在windows機器上,所以需要編輯pre-commit.bat
::/@echo off
setlocal
set repos=%1
set txn=%2
::svnlook log %repos% -t %txn% | awk "else}end" 1>&2
::rem 保證輸入8個字元
::svnlook log %repos% -t %txn% | findstr "........" > nul
::if %errorlevel% gtr 0 goto :err_action
rem 按照格式輸入
svnlook log %repos% -t %txn% | awk "else}end" | grep -e "^\[..*\]..*" > nul
if %errorlevel% gtr 0 goto :err_action1
rem 過濾空格字元
svnlook log %repos% -t %txn% | findstr /ic:" " > nul
if %errorlevel% gtr 0 goto :success
:::err_action
::echo 輸入的注釋不少於 8 個字元說明(或 4 個漢字) >&2
:err_action1
echo 輸入的注釋要遵照格式:[模組名]操作日誌,其中模組名不少於4個字元(或2個漢字),操作日誌不少於10個字元(或5個漢字) >&2
goto :err_exit
:err_exit
exit 1
:success
exit 0
::/走過的坑:
1.windows下的findstr對正規表示式的支援不夠全面,對於方括號的匹配始終沒有找到解決辦法,最後乾脆用linux下的工具來實現
2.找到windows版的grep和awk工具,放到系統盤的目錄有講究,32位系統的話放到c:\windows\system32下,64位系統需要放到c:\windows\syswow64,否則會報找不到命令的錯誤
3.svn的日誌是一行一行提交的,所以需要串成一行字串來做處理
svn加hook,要求必須注釋指令碼
bin sh repos 1 txn 2 svnlook usr bin svnlook 同pre commit.tmpl檔案中的svnlook logmsg svnlook log t txn repos grep a za z0 9 wc c if logmsg lt 2 then echo 提...
svn備份指令碼
svn備份一般採用三種方式 1 svnadmin dump 2 svnadmin hotcopy 3 svnsync.注意,svn備份不宜採用普通的檔案拷貝方式 除非你備份的時候將庫暫停 如copy命令 rsync命令。筆者曾經用 rsync命令來做增量和全量備份,在季度備份檢查審計中,發現備份出來...
SVN備份指令碼
bin bash maxdays 7 備份保留最大天數 time date y m d h m s svnpath data1 svn ser 定義倉庫repos路徑 bakdir data1 svnback 定義備份主目錄 baksubdir 定義全備路徑 baklog log 定義備份日誌 d ...