10

我和这个用户有完全相同的问题:

git init 模板,替换修改后的钩子

我的全局 git 挂钩中有一个新模板文件。但是,原始模板文件已经加载,因此git init不会覆盖。我在这里读到同样的内容,这似乎是正确的 git 行为:

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

在现有存储库中运行 git init 是安全的。它不会覆盖已经存在的东西。重新运行 git init 的主要原因是选择新添加的模板。

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

4

1 回答 1

5

最实用的方法是让用户运行一个特定的命令,而不是告诉他们先删除钩子,然后运行 ​​git init 命令

在这种情况下,一种可能的方法是向这些用户分发一个执行此操作的脚本(您可以在每个存储库中对该脚本进行版本控制)。
他们不会直接执行,而是git init调用该脚本:

  • 取下挂钩
  • 打电话给git init --template=

但请注意您使用 --temaplate 选项使用的路径。赋予“ ”
的相对应相对于目录“ ”被调用,但它是相对于存储库的,已在 Git 2.22.1(2019 年第二季度)中更正。pathnamegit init --template=<path> <repo>git init

请参阅Nguyễn Thái Ngọc Duy ( ) 的提交 e1df7fe(2019 年 5 月 10 日(由Junio C Hamano 合并 -- --提交 35d7715中,2019 年 7 月 25 日)pclouds
gitster

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

期间git-init我们chdir()到了目标目录,但是--template没有调整。
所以它是相对于目标目录而不是当前目录的。

It would be ok if it's documented, but --template in git-init.txt mentions nothing about this behavior.
Change it to be relative to $CWD, which is much more intuitive.

于 2012-05-29T06:35:23.507 回答