[英]How to apply client-side hook to all local repositories in git?
我在myrepo/.git/hooks
創建了一個commit-msg myrepo/.git/hooks
。
#!/bin/sh
message=`cat $1`
c=`echo $message|grep -c 'fff'`
if[ $c -gt 0 ];then
echo "Error"
exit 1
fi
exit 0
當我嘗試像這樣提交時,會發生錯誤並且阻止提交。
$ git commit -m "reffrffffeffff fffeef"
Error
然后,我執行以下操作:
$ cd myrepo
$ mkdir .hooks
$ mv .git/hooks/commit-msg .hooks/commit-msg
$ ln -s .hooks/commit-msg .git/hooks/commit-msg
然后嘗試再次提交相同的消息。 提交成功。 我想我在上述步驟中做錯了什么?
誰能告訴我如何制作客戶端掛鈎,並讓每個開發人員都從該掛鈎中獲得限制嗎?
您建立了錯誤的符號鏈接。 commit-msg
符號鏈接指向.git/hooks/.hooks/commit-msg
。 相反,請嘗試以下操作:
$ cd myrepo
$ mkdir .hooks
$ cd .git/hooks
$ mv commit-msg ../../.hooks/commit-msg
$ ln -s !$ commit-msg # lazy: '!$' expands to '../../.hooks/commit-msg'
如您所知, commit-msg
掛鈎是一個客戶端掛鈎。 如果您希望每個開發人員的提交消息不遵循某些方案而被拒絕,則需要讓開發人員自己安裝該掛鈎。 您不能在存儲庫中保留鈎子,但是可以選擇將其保留在另一個Git存儲庫中。 (要明確,您可以將它們保留在存儲庫中,但是開發人員仍然需要像在現有的方法一樣在.git/hooks
目錄中進行符號鏈接)。
如果您確實想強制開發人員受掛鈎限制,請查看服務器端掛鈎 。 例如,您可以使用pre-receive
來檢查所有推送的提交消息是否符合您的方案。
Pro Git的第8.3章(自定義Git-Git Hooks)是一個很好的資源。 有一些優質的演練可以為您提供幫助。 您還可以查看存儲庫.git/hooks
包含的示例文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.