Git远程/共享预先提交钩子

使用一个官方存储库作为远程存储库,并从中克隆多个本地存储库,可以在该主存储库上编写一个预先提交的钩子脚本,并在其所有的克隆上执行?

我不这么认为,因为钩子没有被克隆。
可能是钩子脚本本身是版本化的,然后链接到克隆服务器(符号链接)(提供他们的操作系统支持链接function)。

或者,如果钩子是用于创build克隆的git模板目录的一部分(这只会确保它们存在于克隆repo中,但不能保证它们被实际使用和执行)。

但我不认为有任何“中心”的方式来执行提交。


正如Jeutti在评论中更加清楚地解释(重点是我):

我认为这真的是违背了git仓库的想法,强制挂钩与回购分销。
我的克隆是我的存储库 。 我应该可以使用它,但我喜欢,包括select是否运行钩子。
(从安全angular度来看,这真是一种可怕的东西 – 任何人在运行某些git命令时都不应该强迫我执行某些脚本。)

我同意这个意见,而且只能看到在某个专门的回购协议中,执行当地适用的规则的方法。
例如,你不会直接推到中央仓库,而是首先推到质量保证仓库,只有遵循一定的规则才能接受你的仓库。 如果是,那么质量保证回购将会把你的承诺推到中央回购。

直接从我刚才提到的另一个例子是“ 无服务器与Git的持续集成 ”,一种强制执行本地私有构build的方法,然后将它们推到任何地方。

你不能在人们的本地仓库上强制执行pre-commit钩子 ,但是在你的中央仓库中,你仍然可以运行一个预先接收的钩子。

F. ex我需要确保提交消息遵守某些规则(对于trac集成等),所以我使用了以下预接收钩子,它检查每个提交消息被推送到中央存储库,并将拒绝推送,如果不是welformed。

 #!/ bin / sh的
同时读取rev_old rev_new参考
做
     MALFORMED =“$(git rev-list --oneline $ rev_old .. $ rev_new | egrep -v'#[0-9] +'| awk'{print $ 1}')”
    如果[x“$ MALFORMED”!= x]
    然后
         echo $ MALFORMED上的Invallid提交消息
        出口1
    科幻
 DONE

欲了解更多信息,请参阅f.ex https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

预先提交的钩子可以在主存储库上编写脚本,并在其所有的克隆上执行?

来自githooks(5)

     预提交
      这个钩子是由git commit调用的,可以绕过
       - 无validation选项。

由于钩子很容易绕过,所以你的问题的答案似乎是“不”。

而且,由于.git / hooks目录没有被克隆,似乎没有将其推送到客户端的机制。

假设你的git仓库中有源代码,并且有一个与之关联的构build系统,你可以configuration构build系统来设置pre-commit钩子,也就是移动或者链接〜版本化的pre-commit钩子。

我还没有尝试过。 我在Google上search更好的解决scheme时来到这里。