我用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.
我究竟做错了什么?
CB *_*ley 88
问题是,/bin/true如果不读取输入,将立即返回.git diff因此,相当合理地认为它已经过早死亡.
你真正想要做的是取消设置diff属性,而不是将其设置为伪命令.试试这个.gitattributes:
Project.xcodeproj/* -diff
Run Code Online (Sandbox Code Playgroud)
您可以在.git/config中使用别名
[alias]
mydiff = !git diff | filterdiff -x "*/Project.xcodeproj/*"
Run Code Online (Sandbox Code Playgroud)
你需要filterdiff(来自patchutils)才能获得这个技巧.
sudo apt-get install patchutils
Run Code Online (Sandbox Code Playgroud)
差异仍然不完美,它留下了一些垃圾:
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
Run Code Online (Sandbox Code Playgroud)
另一种无需任何外部工具即可生成干净输出的解决方案(添加到.git/config):
[alias]
mydiff = !git diff -- $(git diff --name-only | grep -Ev "Project.xcodeproj/")
Run Code Online (Sandbox Code Playgroud)
然后运行它:
git mydiff
Run Code Online (Sandbox Code Playgroud)
请注意,这git diff --name-only比git ls-files将传递较短的文件列表更好git diff,因为只包含已修改的文件.我在使用时超过大项目中的最大参数数而遇到麻烦git ls-files.
| 归档时间: |
|
| 查看次数: |
19667 次 |
| 最近记录: |