如何根据文件扩展名过滤git diff?

时间:2011-12-18 21:01:10

标签: git file-extension

是否可以选择将git diff限制为一组给定的文件扩展名?

9 个答案:

答案 0 :(得分:179)

是的,如果你确保git扩展了一个glob而不是你的shell,那么它将匹配任何级别,所以像这样(引号很重要)应该可以正常工作。

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

答案 1 :(得分:8)

使用你的shell的globstar(进行递归搜索) 1 ,2

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

或使用find:

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

这两个都是特殊名称和空格证明。虽然您可能希望筛选具有.py扩展名的目录:)


1我喜欢git diff -- {.,**}/*.py通常

2启用globstar后,git diff -- **/*.py已包含./*.py。在Bash的联机帮助页中:'如果后跟一个/,则两个相邻的*将只匹配目录和子目录。'

答案 2 :(得分:6)

要递归包括文件(包括当前目录),这对我有用:

git diff -- '***.py'

答案 3 :(得分:1)

扩展名的命令行参数。

git diff *.py

或者,您可以将find导入git diff

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

答案 4 :(得分:1)

对于简单的文件模式,这似乎有效:

$ git ls-files -zm '*.txt' | xargs --null git diff

空白安全,您也可以有多个扩展程序:

$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff

答案 5 :(得分:0)

上面的答案似乎都不适用于Windows下的git bash。我不确定它是否是版本(我使用的是1.8.4)或Windows / bash的东西;另外,在我的情况下,我想要区分两个分支,其中每个分支都有其他分支中没有的其他文件(因此'基于查找的分支是疏忽的。)

无论如何这对我有用(在我的例子中,寻找python文件之间的差异):

git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`

答案 6 :(得分:0)

我结束了这个:

## Quadratic model
lmQuadratic <- lm(formula = y ~ x + I(x^2),
                  data    = fpeg)
## Cubit model
lmCubic <- lm(formula = y ~ x + I(x^2) + I(x^3),
              data    = fpeg)
## Fractional polynomial model
lmFractional <- lm(formula = y ~ x + I(x^2) + I(x^(1/2)),
                   data    = fpeg)

仅当文件名包含单词'test'(不区分大小写)且不以commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit -- 结尾时,才会显示指定提交的差异,并根据您的情况修改管道。

答案 7 :(得分:0)

当我在git版本2.18.0上进行测试时,我们应该在双引号之间编写文件扩展名。如果您要查找本地存储库和远程存储库之间的最后区别,则在拉出后,可以将其编写如下:

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

例如:

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

答案 8 :(得分:0)

请注意,参数顺序会有所不同...例如:

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

“ diff”后必须跟“ master”