不少開發員提交修改的時候都不寫注釋,導致檢視歷史時很費勁,也不太符合規範。有的公司要求每次提交修改時都寫上bug號或者任務描述,那麼如何在工具上防止開發員們不寫注釋呢?
利用svn的pre-commit鉤子可簡單實現此要求。
進入倉庫project1/hooks目錄,找到pre-commit.tmpl檔案,重新命名,去掉字尾.tmpl。
編輯pre-commit檔案:(linux系統和windows系統指令碼內容見1和2)
1、linux系統
方法1:
將:$svnlook log -t "$txn" "$repos" | \
grep "[a-za-z0-9]" > /dev/null || exit 1
commit-access-control.pl "$repos" "$txn" commit-access-control.cfg || exit 1
這三行注釋掉(前面加#符號),
在此位置新增如下幾行:
logmsg=`$svnlook log -t "$txn" "$repos" | grep "[a-za-z0-9]" | wc -c`
if [ "$logmsg" -lt 5 ];#要求注釋不能少於5個字元,您可自定義
then
echo -e "\nlog message cann't be empty! you must input more than 5 chars as comment!." 1>&2
exit 1
fi儲存,退出。
給pre-commit新增可執行許可權:
chmod +x pre-commit
這裡記得修改 $svnlook=(svnlook的路徑,/csvn的安裝目錄/bin/svnlook)
配置結束,可以使用了。
方法2:
這兩天把專案的開發機遷移到了linux環境,用python重寫了原來的svn hook,儲存為pre-commit放到svn的hooks目錄下,chmod +x pre-commit加上執行許可權即可。windows下寫svn鉤子比較麻煩,只能是批處理或者exe,linux下隨便用什麼指令碼語言寫都可以,只要加上可執行許可權就行了。
#! /usr/bin/env python2、windows強制注釋指令碼# -*- coding: utf-8 -*-
"""svn提交前檢查鉤子
功能: 1、強制填寫提交注釋,內容10位元組以上
2、強制注釋格式為:***:***
3、提交檔案檢查,過濾不允許提交的檔案
"""import sys
import os
import re
def main(argv):
(repos, txn) = argv
badlist = (".*config\.php$", ".*/php/cache", ".*test", "config\.js$","^.*\.db$")
message = "".join(os.popen("/usr/bin/svnlook log '%s' -t '%s'" % (repos, txn)).readlines()).strip()
if len(message) < 10:
sys.stderr.write("請輸入本次提交的修改內容,10位元組以上。");
sys.exit(1)
if message.find(':') < 1:
sys.stderr.write("請按規範填寫注釋,格式為:功能名: 修改說明。");
sys.exit(1)
changelist = os.popen("/usr/bin/svnlook changed '%s' -t '%s'" % (repos, txn)).readlines()
for line in changelist:
for pattern in badlist:
if re.search(pattern, line):
sys.stderr.write("請不要把 %s 加入版本庫。" % line[1:].strip());
sys.exit(1)
sys.exit(0)
if __name__ == "__main__":
main(sys.argv[1:])
@echo off
setlocal
set repos=%1
set txn=%2
rem 保證輸入8個字元
svnlook log %repos% -t %txn% | findstr "........" > nul
if %errorlevel% gtr 0 goto :err_action
rem 過濾空格字元
svnlook log %repos% -t %txn% | findstr /ic:" " > nul
if %errorlevel% gtr 0 goto :success
:err_action
echo 你本次版本提交未填寫任何變更的日誌說明資訊. >&2
echo 請補充日誌說明資訊後再提交**,例如:功能說明等. >&2
echo 輸入的日誌資訊不少於8個字元說明(或4個漢字),謝謝! >&2
echo *******************禁止空格資料***************** >&2
goto :err_exit
:err_exit
exit 1
:success
exit 0
svn提交時強制新增注釋
人在很多時候,靠自覺或者說是靠道德,是不行的。必須制定規則,讓其強制遵守。程式設計師也是人,也需要規則。svn提交時,如果沒有注釋,在查閱歷史時,會非常不方便。因此我們需要有乙個讓程式設計師提交 時,強制新增注釋的規則。下面看看在svn中怎麼實現。2.在編輯框中輸入如下指令碼 echo off se...
svn提交時強制新增注釋
人在很多時候,靠自覺或者說是靠道德,是不行的。必須制定規則,讓其強制遵守。程式設計師也是人,也需要規則。svn提交時,如果沒有注釋,在查閱歷史時,會非常不方便。因此我們需要有乙個讓程式設計師提交 時,強制新增注釋的規則。下面看看在svn中怎麼實現。rem 代表5個字元 svnlook log rep...
svn提交時強制新增注釋
人在很多時候,靠自覺或者說是靠道德,是不行的。必須制定規則,讓其強制遵守。程式設計師也是人,也需要規則。svn提交時,如果沒有注釋,在查閱歷史時,會非常不方便。因此我們需要有乙個讓程式設計師提交 時,強制新增注釋的規則。下面看看在svn中怎麼實現。rem 代表5個字元 svnlook log rep...