我用git跟踪一个项目.工作副本中有一些Xcode项目文件,我想继续跟踪,但不想在差异中看到,因为总有几十条我不感兴趣的更改行.是否有一种简单的方法可以git-diff
跳过这些文件?我试图设置一个自定义的"静音"差异工具:
$ cat .gitattributes Project.xcodeproj/* diff=nodiff $ cat ~/.gitconfig [diff "nodiff"] command = /bin/true
但:
$ git diff external diff died, stopping at Project.xcodeproj/zoul.mode1v3.
我究竟做错了什么?
问题是,/bin/true
如果不读取输入,将立即返回.git diff
因此,相当合理地认为它已经过早死亡.
你真正想要做的是取消设置diff属性,而不是将其设置为伪命令.试试这个.gitattributes
:
Project.xcodeproj/* -diff
您可以在.git/config中使用别名
[alias] mydiff = !git diff | filterdiff -x "*/Project.xcodeproj/*"
你需要filterdiff(来自patchutils)才能获得这个技巧.
sudo apt-get install patchutils
差异仍然不完美,它留下了一些垃圾:
yannick@yannick-desktop:~/git-filter-test$ git mydiff diff --git a/Project.xcodeproj/dummy.txt b/Project.xcodeproj/dummy.txt index 3e1f9e6..89dfed9 100644 diff --git a/dummy2.txt b/dummy2.txt index 91966ce..d9588a9 100644 --- a/titi.txt +++ b/titi.txt @@ -1,3 +1,3 @@ aaaaaaaaaa -bbbbbbbbb cccccc +ddd
另一种无需任何外部工具即可生成干净输出的解决方案(添加到.git/config
):
[alias] mydiff = !git diff -- $(git diff --name-only | grep -Ev "Project.xcodeproj/")
然后运行它:
git mydiff
请注意,这git diff --name-only
比git ls-files
将传递较短的文件列表更好git diff
,因为只包含已修改的文件.我在使用时超过大项目中的最大参数数而遇到麻烦git ls-files
.