2

在尝试编写一个拒绝对某些类型的文件进行某些类型的更改的预接收挂钩时,我很难理解为什么在该脚本中以下内容是合法的:

git show <new_commit>:<file>

如本示例中使用的那样(在使用带有 --name-only 的 diff 梳理出受影响的文件之后),但不是

git diff <old_commit> <new_commit> -- <file>

我更喜欢后者,这样我只拒绝引入的更改而不是文件中已经存在的模式,但是当从这个脚本执行时,它会生成错误:“未知的修订或路径不在工作树中”。

我怀疑这与事件的顺序有关,因为两者都在我的裸仓库的命令行中工作,但想了解区别。

4

1 回答 1

-3

正如您链接的答案所指出的那样,当pre-receive执行钩子时,还没有收到任何文件,只有哪些 refs 应该被更新(关于这个和其他钩子的详细信息可以在githooks(5) 手册页上找到)。

由于没有可以与旧数据进行比较的数据,因此无法创建差异。

于 2012-11-30T15:48:14.180 回答