应该使用什么选项将git diff限制为给定的一组文件扩展名?
有没有一个选项来限制git diff
给定的一组文件扩展名?
是的,如果你确保git扩展一个glob而不是你的shell,那么它会在任何级别匹配,所以像这样(引号是重要的)应该工作正常。
git diff -- '*.c' '*.h'
要么使用你的shell的globstar(这是一个recursionsearch) 1,2 :
shopt -s globstar git diff -- *.py **/*.py
或者使用find:
find -name '*.py' -print0 | xargs -0 git diff --
这两个都是特殊名称和空白certificate。 尽pipe您可能想要过滤具有.py扩展名的目录:)
1我喜欢通常做git diff -- {.,**}/*.py
2启用globstar时, git diff -- **/*.py
./*.py
已包含./*.py
。 在Bash的manpage中:'如果后面跟着一个/,两个相邻的*只会匹配目录和子目录。
对于简单的文件模式,这似乎工作:
$ git ls-files -zm '*.txt' | xargs --null git diff
空格是安全的,你也可以有多个扩展:
$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff
用于扩展的命令行参数。
git diff *.py
另外,你可以通过pipe道find
到git diff
:
find . -name '*.py' -type f | git diff --
上面的答案似乎没有在Windows下的git bash
下工作。 我不知道它是一个版本的东西(我使用1.8.4)或Windows / bash的东西; 另外,就我而言,我想要区分两个分支,其中每个分支都有其他分支中不存在的附加文件(因此,基于“find”的分支是不存在的)。
无论如何这工作对我来说(在我的例子中,寻找python文件之间的差异):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
只会显示未分离文件的差异。
我发现这个问题,因为我想从git diff
排除.info
文件。 我通过使用git add *.info
来实现这一点,从而减less了剩下的文件。