将.git/hooks放入项目存储库(例如,使用符号链接)被认为是一种糟糕的做法吗?如果是,将相同的钩子传递给不同的Git用户的最佳方式是什么?


当前回答

预提交npm包很好地处理了这个问题,允许你在包中指定预提交钩子。json文件。

其他回答

不,把它们放到存储库中就可以了。我甚至建议这样做(如果它们对其他人也有用的话)。用户必须显式地启用它们(例如,如您所说,通过符号链接),这一方面有点麻烦,但另一方面它可以保护用户在未经他们同意的情况下运行任意代码。

您可以使用托管解决方案来进行预提交钩子管理,例如预提交。 或者为服务器端git-hook提供集中式解决方案,如date .io。

它有内置的策略,如:

检测和防止秘密的合并。 执行正确的Git用户配置。 强制Jira票集成-在拉请求名称/提交消息中提到票号。

它不会取代所有的钩子,但它可以帮助开发人员使用最明显的钩子,而不必在每个开发人员的计算机/存储库上安装钩子。

免责声明:我是Datrees创始人之一

看起来很多帖子都过时了,至少如果你在python生态系统中使用预提交(+我发现在稍微旧版本的git中更改git钩子路径会失败,例如2.3)。使用.pre-commit-config。Yaml在你的repo根目录的hooks目录下,最简单的解决方案是运行:

pre-commit install -f --config hooks/.pre-commit-config.yaml

预提交npm包很好地处理了这个问题,允许你在包中指定预提交钩子。json文件。

对于基于PHP composer的PHP项目,您可以自动分发给工程师。下面是一个pre-commit和commit-msg钩子的例子。

创建一个hooks文件夹,然后在你的作曲家。json文件:

 },
 "scripts": {
     "post-install-cmd": [
         "cp -r 'hooks/' '.git/hooks/'",
         "php -r \"copy('hooks/pre-commit', '.git/hooks/pre-commit');\"",
         "php -r \"copy('hooks/commit-msg', '.git/hooks/commit-msg');\"",
         "php -r \"chmod('.git/hooks/pre-commit', 0777);\"",
         "php -r \"chmod('.git/hooks/commit-msg', 0777);\"",
     ],

然后你甚至可以在项目继续时更新它们,因为每个人都在定期运行composer安装。