为什么git pre-receive hook显示最近的文件更改但不是差异呢?

时间:2012-11-26 21:16:30

标签: git diff

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

git show <new_commit>:<file>

在此example中使用(在使用带有--name-only的差异排除受影响的文件之后),但不是

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

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

我怀疑它与ordering of events有关,因为两者都在我的裸仓库的命令行上运行,但是想了解这种区别。

1 个答案:

答案 0 :(得分:-3)

正如answer you linked指出的那样,当pre-receive挂钩被执行时,还没有收到任何文件,只有哪些引用应该更新(关于这个和其他挂钩的详细信息可以在{ {3}})。

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