如何使用git init替换本地git钩子为更新版本?

10

我有和这个用户一样的问题

我在全局git钩子文件中有一个新的模板文件。然而,原始的模板文件已经被加载,所以 git init 不会覆盖。我在这里读到了相同的内容,这似乎是正确的git行为:

http://www.cs.potsdam.edu/cgi-bin/man/man2html?1+git-init 中说:

在现有存储库中运行git init是安全的。它不会覆盖已经存在的内容。重新运行git init的主要原因是为了使用新添加的模板。

那么强制重新加载新的git模板钩子的好方法是什么?我有很多钩子分布在许多git repo中,在几台计算机上使用,并由各种用户使用。最实际的方法是让用户运行特定的命令,而不是告诉他们先删除钩子,然后运行 git init 命令。是否有一种方法可以做到这一点?

1个回答

4
最实用的方法是让用户运行特定命令,而不是告诉他们先删除钩子,然后再运行git init命令。
在这种情况下,一种可能的方法是向这些用户分发一个脚本,该脚本执行此操作(您可以在每个存储库中对该脚本进行版本控制)。 他们不会直接执行git init,而是调用该脚本,该脚本将:
- 删除钩子 - 调用 git init --template=

但要注意使用--template选项时所使用的路径。
给"git init --template=<path> <repo>"命令中的相对pathname 应该是相对于执行"git init"命令的目录,但实际上它是相对于仓库的, 这个问题已经在Git 2.22.1 (2019年第二季度)得到了修正。

请看提交e1df7fe(2019年5月10日),作者是Nguyễn Thái Ngọc Duy (pclouds)
(由Junio C Hamano -- gitster --于2019年7月25日合并至提交35d7715

init: 使--template路径相对于$CWD

git-init期间,我们会chdir()到目标目录,但--template没有调整。
因此它是相对于目标目录而不是当前目录的。
如果有文档记录这个行为,那就没问题了,但是git-init.txt中的--template没有提及这一点。
将其更改为相对于$CWD,这更加直观。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接