Git钩子管理

Git钩子管理,git,githooks,Git,Githooks,我们在项目中使用定制的Git钩子 钩子存储在项目的存储库中,当钩子发生更改时,为了获得新版本,每个用户必须在其.git/Hooks目录中手动复制钩子。这相当不方便 改进这一点的一种方法是将.git/hooks作为一个符号链接到工作树中。但这意味着每个分支(甚至用户正在开发的本地特性分支)都应该有最新版本的钩子。这也不方便 如何解决这个问题?维护一个单独的钩子存储库,并将其符号链接到该存储库中 我同意,如果Git有一个用于传播hooks脚本的内置机制就好了,但是它没有。我们将.Git/hooks作

我们在项目中使用定制的Git钩子

钩子存储在项目的存储库中,当钩子发生更改时,为了获得新版本,每个用户必须在其.git/Hooks目录中手动复制钩子。这相当不方便

改进这一点的一种方法是将.git/hooks作为一个符号链接到工作树中。但这意味着每个分支(甚至用户正在开发的本地特性分支)都应该有最新版本的钩子。这也不方便


如何解决这个问题?

维护一个单独的钩子存储库,并将其符号链接到该存储库中


我同意,如果Git有一个用于传播hooks脚本的内置机制就好了,但是它没有。

我们将.Git/hooks作为一个符号链接到工作树中


对于很少有人需要提交钩子将拒绝的文件的情况,我们使用
git commit--no verify

似乎是一种方便的方式来自动进行钩子符号链接,以方便全局钩子、每个用户钩子和每个项目钩子。

您可以将存储库的
.git
目录设置为git存储库,只需向其添加钩子和其他配置,将
对象
引用
等目录和文件(如
索引
)添加到其
.gitignore
)。不仅如此,您还可以设置一个post接收钩子来从其来源更新metarepo。一旦您设置了初始配置,您就可以在不需要任何额外工作的情况下将其拉入更新


我正在制定这方面的细节,比如应该在忽略列表中列出什么;我将结果保存在的分支中。

在Git2.9中,您可以使用
core.hooksPath
配置指向自定义的hooks目录

Git 2.9发行说明-

文件中提到的
core.hooksPath
-


注意-这个问题可能与基于NodeJS的项目重复,我建议您看看。

有一系列看起来很有前途的功能

  • 适用于多种语言,并且有一个插件架构来添加对其他语言的支持
  • 能够引导钩子依赖项(依赖于语言)
  • 以增量方式应用钩子(仅对作为提交一部分的更改运行钩子)
  • 利用新签出的回购协议自动安装正确的挂钩
  • 使用环境变量临时禁用特定挂钩-不要因为无法运行其中一个而跳过所有检查

当然,这是一个选项,但这是早上要更新的另一个存储库。。。对于每个开发人员。我想我需要更多的自动化…git提交--不验证是危险的。当您有错误的提交时,很难重新设置基址。@Alexander,git重新设置基址也会使用--no verify标志。谢谢,我错过了它。还是。。。黑客。:-)我仍然不明白为什么这样做很危险。事实上,这意味着钩子对于共享存储库是正确的,我们希望尽早进行这些检查,即使在本地处理分支时也是如此。但有时,我们暂时希望将代码签入钩子失败的本地分支(当树中充满调试代码时,通常是“正在进行的工作”提交,钩子会拒绝)。在将支管推向上游之前,将使支管通过挂钩并重新固定,以移除“正在进行”的构件。你说hack,我说有时候你需要把机器的防护装置卸下来,在其中一个齿轮上放一根棍子。这个github看起来有点不活动,但在
https://github.com/git-hooks/git-hooks