更新版本控制上的 pre_commit 挂钩文件

Ric*_*wis 6 git githooks

我最近更新了我的pre_commit.sample文件以在提交时运行 rubocop(重命名为 pre_commit)。

#!/bin/sh
#
# Check for ruby style errors
rake run:rubocop
Run Code Online (Sandbox Code Playgroud)

我错误地认为这会在拉取更改时在其他开发人员计算机上更新。我如何确保任何提取更改的人都更新了其 pre_commit 文件

谢谢

Cod*_*ard 9

直到 git v2.9 为止,还没有办法在客户端更新 hooks。

\n\n

Git v2.9 公开了新的配置来允许这样做:

\n\n
git config [--local] core.hooksPath ...\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

core.hooksPath\n 默认情况下,Git 将在 $GIT_DIR/hooks 目录中查找您的钩子。将其设置为不同的路径,例如/etc/git/hooks,Git将尝试在该目录中查找您的钩子,例如/etc/git/hooks/pre-receive,而不是在$GIT_DIR/hooks/pre-receive中。

\n\n

该路径可以是绝对路径或相对路径。
\n 相对路径是相对于运行钩子的目录而言的。

\n\n

如果您\xe2\x80\x99想要集中配置 Git 挂钩而不是在每个存储库上配置它们,或者作为更灵活和集中的替代方案,而不是在其中使用 init.templateDir,则此配置变量非常有用。 xe2\x80\x99已更改默认挂钩。

\n
\n


Von*_*onC 2

正如我在 2016 年 5 月的“ Git commit hooks - 全局设置”和“更改默认 git hooks ”中提到的,Git 2.9 和 2.10 引入了git config core.hooksPath.

这似乎让OP感到困惑

例如,如果我有一个现有的存储库,并希望所有其他拉取更改的开发人员都拥有更新的预提交挂钩,我将如何执行此操作?
在回购协议中/.git/hooks/pre_commit,我可以指出这一点吗?

更准确地说,在 git 存储库中,有一个/.git/hooks/pre-commit.sample,并且考虑到您希望所有pre-commit开发人员都有一个通用的钩子,因此您应该创建然后指向本地存储库中的脚本。/.git/hooks/pre_commit

所有开发人员都必须引用与 一起使用的相同全球共享网络可访问路径 git config core.hooksPath \\a\common\shared\path:该设置需要在每个开发人员工作站上激活,无论是在其存储库(本地设置)内还是在其所有存储库(全局设置: git config --global core.hooksPath \\a\common\shared\path.

(我在这里使用Windows UNC 语法,请使用适合您操作系统的语法)

一旦它们都引用相同的路径,您就可以在那里设置预提交挂钩:

 \\a\common\shared\path\pre-commit
Run Code Online (Sandbox Code Playgroud)

然后您可以更新该脚本(每个人都可以访问的脚本),让所有开发人员立即受益于更新。