是否有一个选项来限制git差异到一个给定的文件扩展名集?


当前回答

使用你的shell的globstar(它做递归搜索)1,2:

shopt -s globstar 
git diff -- *.py **/*.py

或者使用find:

find -name '*.py' -print0 | xargs -0 git diff --

这两个都是特殊名称和空格证明。尽管你可能想要过滤扩展名为.py的目录:)


我通常喜欢使用git diff——{.,**}/*.py

启用globstar时,git diff——**/*.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'

Git diff只会显示非暂存文件中的差异。

我发现这个问题是因为我想从git diff中排除.info文件,我通过git add *.info来实现这一点,这减少了剩下的文件。

在git版本2.18.0上测试时,文件扩展名应该使用双引号。如果你想找到本地存储库和远程存储库之间的最后一个差异,在拉取后,你可以使用:

git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"

例如:

git diff master@{1} origin/master --name-only "*.cs"

使用你的shell的globstar(它做递归搜索)1,2:

shopt -s globstar 
git diff -- *.py **/*.py

或者使用find:

find -name '*.py' -print0 | xargs -0 git diff --

这两个都是特殊名称和空格证明。尽管你可能想要过滤扩展名为.py的目录:)


我通常喜欢使用git diff——{.,**}/*.py

启用globstar时,git diff——**/*.py已经包含了./*.py。在Bash的manpage中:“如果后面跟着一个/,两个相邻的*将只匹配目录和子目录。”