是否可以选择将git diff
限制为一组给定的文件扩展名?
答案 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”