从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-only
比git 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 rm ( http://www.kernel.org/pub/software/scm/git/docs/git-rm.html )
你通过去testing它
git rm --dry-run *.log
(如果你说要排除所有的日志文件)
这将输出将被排除的东西,如果你运行它。
然后
你去运行它
git rm *.log
(或者你想要的任何文件名path/expression式)