是否有一个选项来限制git差异到一个给定的文件扩展名集?
扩展的命令行参数。
git diff *.py
在另一种选择中,你可以将find管道导入git diff:
find . -name '*.py' -type f | git diff --
对于简单的文件模式,这似乎是可行的:
$ git ls-files -zm '*.txt' | xargs --null git diff
空格安全,你也可以有多个扩展:
$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff
使用你的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'
上面的答案似乎都不适合我在git bash下的Windows。我不确定这是否是一个版本的事情(我使用1.8.4)或Windows/bash的事情;此外,在我的情况下,我想区分两个分支,其中每个分支都有其他分支中不存在的额外文件(因此“查找”基于的是疏忽)。
不管怎样,这对我来说是有效的(在我的例子中,寻找python文件之间的差异):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
Git diff只会显示非暂存文件中的差异。
我发现这个问题是因为我想从git diff中排除.info文件,我通过git add *.info来实现这一点,这减少了剩下的文件。
最后我得出了这个结论:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
只有当文件名包含单词“test”(不区分大小写)并且不以.sql结尾时,才会显示指定提交的差异,根据您的情况修改管道。
在git版本2.18.0上测试时,文件扩展名应该使用双引号。如果你想找到本地存储库和远程存储库之间的最后一个差异,在拉取后,你可以使用:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
例如:
git diff master@{1} origin/master --name-only "*.cs"
注意参数顺序不同…例如:
git diff master --name-only --relative -- "**/*.ts" "**/*.tsx" "**/*.js" "**/*.jsx" "**/*.vue"
'diff'后面需要跟'master'
推荐文章
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- Git存储库中的悬垂提交和blob是什么?它们来自哪里?
- 我如何简单地从我最新的git提交创建一个补丁?
- Git显示“警告:永久添加到已知主机列表”
- 我如何检索一个回购的远程git地址?
- 如何列出提交,因为某些提交?
- 如何在不位于存储库的情况下执行Git命令?
- 为什么git在Windows下记不住我的密码
- 我如何得到bash完成工作与别名?