根据git diff手册,您应该可以执行以下操作
git diff [options] <commit> <commit> [--] [<path>...]
我只想比较*.h,*.c,*,*.cpp
个文件。所以在阅读What option should be used restrict the git diff to a given set of file extensions?之后我尝试了类似下面的东西:
$ git diff --shortstat `git rev-list --since="jun 30 2014" --reverse origin/master | head -1`..`git rev-list --until="dec 31 2014" origin/master | head -1` -- `find -name '*.h' -print0`
我已经尝试了find -name '*.h' -print0
命令,它打印出大量.h
个文件。但是当我运行上面的整个命令时,我得不到任何结果。
以下命令也可以正常工作:
git diff --shortstat `git rev-list --since="jun 30 2014" --reverse origin/master | head -1`..`git rev-list --until="dec 31 2014" origin/master | head -1`
打印出来
372 files changed, 31650 insertions(+), 9580 deletions(-)
但我假设这是存储在repo中的所有文件,我只想知道.h .c .cpp
文件之间的区别。
也许你有一个更好的主意,或者你看到可能是什么问题?
答案 0 :(得分:0)
你可以试试这个
git diff --name-only SHA1 SHA2
答案 1 :(得分:0)
Some or all identity references could not be translated.
支持通配符,因此您只需在命令末尾添加:<path>
即可。请务必首先记住-- *.h *.c *.cpp
到git repo的根目录,因为此语法将在当前目录中查找cd
,.h
和.c
(递归)。 / p>
所以:
.cpp
答案 2 :(得分:0)
你的问题是-print0
使用nul-terminators来分隔文件名,但这最终将你的所有文件名作为单个参数传递给git diff
(它不会理解{{} 1}} S)。
相反,请使用nul
:
xargs
# variables for sanity
START=$(git rev-list --since="jun 30 2014" --reverse origin/master | head -1)
END=$(git rev-list --until="dec 31 2014" origin/master | head -1)
find . \( -name '*.h' -o -name '*.cpp' -o -name '*.c' \) -print0 | xargs -0 git diff --shortstat ${START}..${END} --
输出以nul结尾的文件路径,传递给find
,将这些路径拆分为xargs -0
的参数。