当我想获取git diff文件时,我发现有人使用
git diff-index --cached --diff-filter=AM --name-only HEAD
如果我使用
git diff --cached --diff-filter=AM --name-only HEAD
可以获得相同的结果。
那么git diff
和git diff-index
之间有什么区别?
您必须使用git diff-index
但不能使用git diff
吗?
答案 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/