簡體   English   中英

如何將客戶端掛鈎應用到git中的所有本地存儲庫?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM