当前位置:  开发笔记 > IOS > 正文

从git-diff中排除文件

如何解决《从git-diff中排除文件》经验,为你挑选了3个好方法。

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

我究竟做错了什么?



1> CB Bailey..:

问题是,/bin/true如果不读取输入,将立即返回.git diff因此,相当合理地认为它已经过早死亡.

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

Project.xcodeproj/* -diff


排除整个目录对我来说不起作用,因为许多文件都在更深的子目录中.相反*.xcuserstate -diff有助于忽略经常更改的文件.
我正在使用Git 1.9.4并添加`-diff`现在使diff处理我想要排除的文件作为二进制文件,而不是忽略它们...
如果你想排除子目录,请改为使用`Project.xcodeproj/**/*-diff`.

2> yanjost..:

您可以在.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



3> Connor McKay..:

另一种无需任何外部工具即可生成干净输出的解决方案(添加到.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.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有