将git post-commit挂钩应用于所有当前和未来的repos

swa*_*son 266 git hook githooks

我写了一个Git post-commit钩子,它工作正常.但是,我想添加此钩子以应用于我正在处理的所有当前(和将来)git存储库.我尝试将钩子添加到我~/.git/hooks/而不是项目目录中的hooks目录中,但是,这似乎不起作用.

有没有办法创建将应用于我的系统上的所有存储库的全局Git挂钩(无需将它们复制到每个项目目录中)?如果没有,那么最好的解决方案是什么 - 也许是一个git-init模板?

skl*_*lnd 284

正如吉特1.7.1,您可以设置init.templatedir在gitconfig告诉混帐到哪里寻找模板.

像这样设置:

git config --global init.templatedir '~/.git_template'
Run Code Online (Sandbox Code Playgroud)

之后,您创建或克隆的新存储库将使用此目录作为模板.放置你想要的钩子~/.git_template/hooks.可以通过git init在同一目录中运行,使用适当的模板重新初始化现有存储库.git.

对于早于1.7.1的git版本,git init --template ~/.git_template如果你像我一样仍然希望管理你的.git_template目录以及其余的点文件,那么运行将会起作用.您还可以使用该$GIT_TEMPLATE_DIR环境来告知git init模板目录的位置.

  • 很好的答案.如果有人想知道在现有仓库上重新运行`git init`是否会消除它 - **它不会**,请参阅:http://stackoverflow.com/questions/5149694/does-running-git-init-twice -initialize-A-库 - 或重新初始化-AN-现有 (49认同)
  • 提示:模板挂钩已复制。如果您希望能够一起更新全局挂钩,请将挂钩放在其他位置并在模板目录中添加符号链接(在 Linux 上)。确保链接路径是绝对路径。 (3认同)
  • 仅供参考, ~/.git_template 不会使用该命令自动创建。您仍然需要自己使用 mkdir ~/.git_template 来完成此操作 (2认同)
  • 在不带引号的 Windows 上: ` git config --global init.templatedir d:\git\.git_template\ ` (2认同)

Von*_*onC 173

我想添加此钩子以应用于我正在处理的所有当前(和将来)git存储库

使用git 2.9+(2016年6月),您所要做的就是:

git config --global core.hooksPath /path/to/my/centralized/hooks
Run Code Online (Sandbox Code Playgroud)

请参阅" 更改默认git hooks ":已完成此操作以管理集中式挂钩.

  • @Richlewis你的意思是http://stackoverflow.com/a/40550555/6309不完全清楚吗? (2认同)

Cas*_*bel 69

如果你希望他们无处不在您的系统(包括除了你的用户),您可以修改已安装的模板目录的内容-这些都在$PREFIX/share/git-core/templates/hooks,那里$PREFIX可能是/usr/local/usr.

如果你想让它只适合你,那么是的,最简单的事情就是--template选择git-init.您可以轻松地将具有符号链接的个人模板目录保存回您要保留的已安装的默认版本(单个挂钩,信息目录...),然后将您自己的内容hooks/post-commit和您要自定义的任何其他内容保存在其中.

  • 谢谢,这很好.为了追溯将它应用到我现有的项目中,我只是再次运行`git init`并添加了我的新钩子. (11认同)
  • 对于SourceTree在OS X上的嵌入式git,它们位于`/ Applications/SourceTree.app/Contents/Resources/git_local/share/git-core/templates/hooks` (2认同)
  • 对于 Windows,可以在 `mingw64\share\templates\hooks` 下的 git 安装目录中找到(对于 32 位则为 mingw32) (2认同)

Nei*_*est 5

最简单的方法是git_hooks/在您的存储库中创建一个目录,以跟踪您为该项目编写的钩子,通过在a中提及它来引起未来用户的注意README,并依赖它们在克隆后做正确的事情.我已经对此进行了一段时间的考虑并选择了增量方法.在路上,我可能会考虑使用像git-hooks这样的工具.

  • 这离真正的解决方案太远了,我不得不投反对票,抱歉。 (3认同)