在團隊開發中,當成員提交代碼的描述信息不符合約定提交規范的時候,需要阻止當前的提交,而要實現這個目的,我們就需要先來了解一個概念,叫做 Git hooks,即Git 在執行某個事件之前或之后進行一些其他額外的操作。
而我們所期望的 阻止不合規的提交消息,那么就需要使用到 hooks 的鉤子函數。
相關的 hooks 非常多,我們用的比較多的其實只有兩個。
1. commit-msg:可以用來規范化標準格式,并且可以按需指定是否要拒絕本次提交;
2. pre-commit:會在提交前被調用,并且可以按需指定是否要拒絕本次提交;
下面是我整理出來的所有的 hooks ,大家可以進行一下參考,其中紅色的是常用到的 hooks。
PS:詳細的 hooks 介紹 可點擊這里查看?
Git Hook | 調用時機 | 說明 |
---|---|---|
pre-applypatch | git am執行前 | |
applypatch-msg | git am執行前 | |
post-applypatch | git am執行后 | 不影響git am的結果 |
pre-commit | git commit執行前 | 可以用git commit --no-verify繞過 |
commit-msg | git commit執行前 | 可以用git commit --no-verify繞過 |
post-commit | git commit執行后 | 不影響git commit的結果 |
pre-merge-commit | git merge執行前 | 可以用git merge --no-verify繞過。 |
prepare-commit-msg | git commit執行后,編輯器打開之前? | |
pre-rebase | git rebase執行前 | |
post-checkout | git checkout或git switch執行后 | 如果不使用--no-checkout參數,則在git clone之后也會執行。 |
post-merge | git commit執行后 | 在執行git pull時也會被調用 |
pre-push | git push執行前 | |
pre-receive | git-receive-pack執行前 | |
update?? ? | ||
post-receive | git-receive-pack執行后 | 不影響git-receive-pack的結果 |
post-update | 當 git-receive-pack對 git push 作出反應并更新倉庫中的引用時?? ? | |
push-to-checkout | 當git-receive-pack對git push做出反應并更新倉庫中的引用時,以及當推送試圖更新當前被簽出的分支且receive.denyCurrentBranch配置被設置為updateInstead時 | |
pre-auto-gc | git gc --auto執行前?? ? | |
post-rewrite | 執行git commit --amend或git rebase時 | |
sendemail-validate | git send-email執行前?? ? | |
fsmonitor-watchman | 配置core.fsmonitor被設置為.git/hooks/fsmonitor-watchman或.git/hooks/fsmonitor-watchmanv2時 | |
p4-pre-submit | git-p4 submit執行前?? | ?可以用git-p4 submit --no-verify繞過 |
p4-prepare-changelist | git-p4 submit執行后,編輯器啟動前 | 可以用git-p4 submit --no-verify繞過 |
p4-changelist | git-p4 submit執行并編輯完changelist message后 | 可以用git-p4 submit --no-verify繞過 |
p4-post-changelist | git-p4 submit執行后?? ? | |
post-index-change | 索引被寫入到read-cache.c do_write_locked_index后 |