从git-diff中排除文件

时间:2009-06-19 07:47:07

标签: git

我正在用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.

我做错了什么?

4 个答案:

答案 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
(或者你想要的任何文件名路径/表达式)