如何安装新的 git 挂钩到所有现有的(克隆的)存储库?
How to install new git hook to all existing (cloned) repositories?
我的机器上有大约 50 个存储库。我想为所有这些安装新创建的 git 挂钩。
我已经创建了 .git-templates
文件夹并将挂钩放在那里,然后 git config --global init.templatedir ~/.git-templates
- 它适用于新存储库,但现有存储库呢?
如果您使用的是最新版本的 git
(>= 2.9),那么我建议您使用 core.hooksPath
变量。
然后你可以创建一个单独的目录来放置你所有的钩子,例如/var/myhooks
,然后
git config --global core.hooksPath /var/myhooks
将使该目录立即成为所有存储库的默认挂钩目录。作为副作用,每个存储库中 .git/hooks
下的所有挂钩都将被忽略。但是在特定的存储库中,您可以使用自己的钩子目录再次覆盖它:
git config core.hooksPath .git/hooks
就去做吧。找到所有存储库并复制挂钩。这是一个示例(这可能比您想象的要多,这就是为什么实际副本得到回显而不执行的原因,如果您的路径名中可能有 '
,请不要只是 c&p 回显命令):
find ~ -name HEAD -execdir test -f config -a -d objects -a -d refs \; \
-execdir mkdir -p hooks \; \
-printf "cp -a ~/.git-templates/hooks '%h'/hooks\n"
我的机器上有大约 50 个存储库。我想为所有这些安装新创建的 git 挂钩。
我已经创建了 .git-templates
文件夹并将挂钩放在那里,然后 git config --global init.templatedir ~/.git-templates
- 它适用于新存储库,但现有存储库呢?
如果您使用的是最新版本的 git
(>= 2.9),那么我建议您使用 core.hooksPath
变量。
然后你可以创建一个单独的目录来放置你所有的钩子,例如/var/myhooks
,然后
git config --global core.hooksPath /var/myhooks
将使该目录立即成为所有存储库的默认挂钩目录。作为副作用,每个存储库中 .git/hooks
下的所有挂钩都将被忽略。但是在特定的存储库中,您可以使用自己的钩子目录再次覆盖它:
git config core.hooksPath .git/hooks
就去做吧。找到所有存储库并复制挂钩。这是一个示例(这可能比您想象的要多,这就是为什么实际副本得到回显而不执行的原因,如果您的路径名中可能有 '
,请不要只是 c&p 回显命令):
find ~ -name HEAD -execdir test -f config -a -d objects -a -d refs \; \
-execdir mkdir -p hooks \; \
-printf "cp -a ~/.git-templates/hooks '%h'/hooks\n"