git diff和gif diff-index之间的区别是什么?

时间:2014-06-13 04:15:28

标签: git

当我想获取git diff文件时,我发现有人使用

git diff-index --cached  --diff-filter=AM --name-only  HEAD

如果我使用

git diff --cached --diff-filter=AM --name-only  HEAD 

可以获得相同的结果。 那么git diffgit diff-index之间有什么区别? 您必须使用git diff-index但不能使用git diff吗?

2 个答案:

答案 0 :(得分:10)

git diff-index是对索引或工作树的差异:

  

将树对象中找到的blob的内容和模式与工作树中相应的跟踪文件或索引中的相应路径进行比较

git diff更通用,可以比较两个文件,或两个提交,或者(如diff-index)树和索引。

在你的情况下,diff HEAD确实会对索引进行区分,diff-index也会这样做。

答案 1 :(得分:1)

diff-index是一种较低级别的操作,它操作较少但速度更快,因为它不查看内容,它只检查像时间戳这样的元数据。只有Linux,您可以通过以下方式验证:

  strace -f -e file -o diff-index.log git diff-index HEAD
  wc diff-index.log
  less diff-index.log

忘记diff-index,除非你有一些git性能问题需要解决。

https://git-scm.com/docs/git-update-index#_using_assume_unchanged_bit

https://public-inbox.org/git/loom.20160331T143733-916@post.gmane.org/