从git-diff中排除文件

我正在用git跟踪一个项目。 有一些工作副本中的Xcode项目文件,我想要跟踪,但不希望看到差异,因为总是有很多改变的行,我从来没有感兴趣的是有一个简单的方法让git-diff跳过这些文件? 我试图build立一个自定义的“无声”差异工具:

 $ cat .gitattributes 
 Project.xcodeproj / * diff = nodiff

 $ cat〜/ .gitconfig 
 [diff“nodiff”]
    命令= / bin / true

但:

 $ git diff
外部差异死亡,停在Project.xcodeproj / zoul.mode1v3。

我究竟做错了什么?

问题是/bin/true会立即返回而不读取其input。 因此, git diff相当合理地认为它已经过早地死亡了。

你真正想要做的是取消设置diff属性,而不是将其设置为伪命令。 在你的.gitattributes试试这个:

 Project.xcodeproj/* -diff 

另一种无需任何外部工具即可生成干净输出的解决scheme(添加到.git/config ):

 [alias] mydiff = !git diff -- $(git diff --name-only | grep -Ev "Project.xcodeproj/") 

然后运行它:

 git mydiff 

请注意, git diff --name-onlygit ls-files更好,因为它只会将较短的文件列表传递给git diff ,因为只有被修改的文件才会被包含。 使用git ls-files时,遇到了超出大型项目中参数最大数量的麻烦。

您可以在.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 / info /排除太晚

具体是什么你需要忽略一个文件实际上是使用命令git删除请参阅git rmhttp://www.kernel.org/pub/software/scm/git/docs/git-rm.html

你通过去testing它

git rm --dry-run *.log
(如果你说要排除所有的日志文件)

这将输出将被排除的东西,如果你运行它。

然后

你去运行它

git rm *.log
(或者你想要的任何文件名path/expression式)