我正在用git跟踪一个项目。工作副本中有一些我想要跟踪的Xcode项目文件,但是不想在差异中看到,因为总有很多我不感兴趣的更改行。有一种简单的方法可以{{ 1}}跳过这些文件?我试图设置一个自定义的“静音”差异工具:
$ cat .gitattributes Project.xcodeproj/* diff=nodiff $ cat ~/.gitconfig [diff "nodiff"] command = /bin/true
可是:
$ git diff external diff died, stopping at Project.xcodeproj/zoul.mode1v3.
我做错了什么?
答案 0 :(得分:86)
问题是/bin/true
会立即返回,而不会读取其输入。因此,git diff
非常合理地认为它已经过早死亡。
您真正想要做的是取消设置diff属性,而不是将其设置为伪造命令。在.gitattributes
:
Project.xcodeproj/* -diff
答案 1 :(得分:7)
您可以在.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
答案 2 :(得分:7)
另一种无需任何外部工具即可生成干净输出的解决方案(添加到.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
时超过大项目中的最大参数数时遇到了麻烦。
答案 3 :(得分:0)
只是让别人有同样的痛苦。 我们想要排除已经提交的文件。
这篇文章更有用: working with .git/info/exclude too late
具体而言,您需要忽略文件实际上是使用命令git remove 请参阅 git rm (http://www.kernel.org/pub/software/scm/git/docs/git-rm.html)
你去试试
<强> git rm --dry-run *.log
强>
(如果你说要排除所有日志文件)
如果您运行它,将输出将排除的内容。
然后
你通过
来运行它 <强> git rm *.log
强>
(或者你想要的任何文件名路径/表达式)