2017-02-19 57 views
0

我試圖強制用戶將JIRA票證添加到git commit。git hooks在提交消息中執行JIRA票證號碼

我使用了預先接收的鉤子,但它只能在推後才能工作。我希望它在提交後工作,所以如果消息格式不正確,提交將失敗,用戶將可以選擇編輯提交。

這是我的代碼示例:

#!/usr/bin/env bash 

# set this to your active development branch 
#develop_branch="master" 
#current_branch="$(git rev-parse --abbrev-ref HEAD)" 

# only check commit messages on main development branch 
#[ "$current_branch" != "$develop_branch" ] && exit 0 

# regex to validate in commit msg 
commit_regex='(#-[0-9]+|merge)' 
error_msg="Aborting commit. Your commit message is missing either a JIRA Issue ('#-1111') '" 
rm -rf fl.txt 
echo $1 >> fl.txt 
fil="fl.txt" 

if ! grep -iE $commit_regex $fil; then 
    echo "$error_msg" >&2 
    exit 1 
fi 
rm -rf fl.txt 
+0

如果您希望提交失敗,則需要預先提交掛鉤。在提交後它不應該工作。 – jonrsharpe

+0

也許我錯過了一些東西。如果我將使用預先提交,那麼它將失敗提交併允許用戶進行編輯?我設法工作的唯一事情是預先接收。也許你有它的代碼示例? – sarit

+0

是的,當您想要的行爲符合預先提交的鉤子時,您正在編寫預接收鉤子。請參閱可用鉤子文檔:https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hooks – jonrsharpe

回答

0

,我設法工作是唯一的前收到

這是正確的做法:你制定一個策略(這裏檢查服務器端的提交消息(在此實例中,您的GitLab服務器使用GitLab custom hook):這是通過server-side hookserver-side hook完成的。

這意味着它會甩掉git push,迫使用戶修改他/她的提交併再次推送。

我必須同時預先提交和預接收才能使預接收工作?

不,只需要預接收掛鉤。嘗試在服務器級別進行預提交掛鉤工作是不可能的:您必須以某種方式將其分發給所有開發人員,以便他們在自己的本地回購庫中激活它。這是不實際的。

+0

嘿,謝謝你的回覆。 這對於爲開發者分發鉤子並不是問題,如果它能幫助我使它工作:) pre-receive只能在推後才能工作,但我希望進程在提交級別失敗,因此用戶將能夠編輯他的消息並再次提交 – sarit

+0

這實際上是一個非常分佈的問題,因爲預先提交的鉤子必須由開發者在本地激活,並且他/她可以繞過鉤子。 – VonC

+0

與服務器端預接收掛鉤相反,它不能被繞過,並且可能推送失敗。所以這是正確的方法。 – VonC