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


当前回答

最后我得出了这个结论:

commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --

只有当文件名包含单词“test”(不区分大小写)并且不以.sql结尾时,才会显示指定提交的差异,根据您的情况修改管道。

其他回答

扩展的命令行参数。

git diff *.py

在另一种选择中,你可以将find管道导入git diff:

find . -name '*.py' -type f | git diff --

为了递归地包括文件(包括当前目录),这对我来说是有效的:

git diff -- '***.py'

注意参数顺序不同…例如:

git diff master --name-only --relative -- "**/*.ts" "**/*.tsx" "**/*.js" "**/*.jsx" "**/*.vue"

'diff'后面需要跟'master'

使用你的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扩展一个glob而不是你的shell,那么它将在任何级别匹配,所以像这样的东西(引号很重要)应该工作得很好。

git diff -- '*.c' '*.h'