【发布时间】:2011-09-30 08:20:31
【问题描述】:
我已经阅读了 Git Pro 网站,并且在 StackOverflow 上阅读了多个答案,但遗憾的是我根本无法让 .gitattributes 为我工作。
每当我使用git difftool 时,它都会尝试显示二进制文件之间的差异,例如图像文件 (PNG)。
我在 .gitattributes 文件中尝试了多种组合,但每当我运行 git difftool 命令时,它仍会尝试比较二进制文件。
在我的存储库文件夹中,我有:
.git
.git 属性
[我项目的文件子目录]
我为我的 .gitattributes 文件尝试了多种过滤器组合。例如:
*.pbxproj 二进制文件
*.png 二进制文件
也可以:
*.pbxproj 二进制文件-diff
*.png 二进制 -diff
偶数:
*.pbxproj 二进制文件
*.png 二进制
*.pbxproj -diff -difftool
*.png -diff -difftool
每次,我只需将我的 .gitattributes 文件添加到索引并提交它。但是,这样做之后,当我运行 git difftool 来检查两个分支之间的差异时,会发生这种情况:
git difftool otherBranch HEAD
查看:“MyApp.xcodeproj/project.pbxproj” 点击返回以启动“diffmerge”:
查看:'MyApp/Background1.png' 点击返回以启动“diffmerge”:
它怎么会这样?如何最终正确设置我的 .gitattributes 文件,这样我就不必查看这些特定文件的差异?
为了进一步调查,我使用了git check-attr命令如下:git check-attr binary MyApp/MainBackground.png
输出是MyApp/MainBackground.png: binary: set ...我想知道为什么 git difftool 仍然强迫我查看差异!
【问题讨论】:
-
您是否尝试将您的
.gitattributes文件与二进制文件直接放在同一目录中? -
我也有同样的问题。 “*.exe -crlf -diff”在我的 .gitattributes 中,但 git diff(设置为调用 meld,如 nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy 所述)仍然试图区分它。 .gitattributes 与 exe 文件位于同一目录中。
-
我删除了 diff.external 配置设置,它没有任何区别。使用 .gitattributes 文件:diff 表示“二进制文件 a/xx.exe 和 b/xx.exe 不同”。没有文件,它说的完全一样。 (顺便说一句,我也尝试过使用 .git/info/attributes,但这也没有帮助。)
-
@VonC - .gitattributes 文件位于我的存储库的根文件夹中。二进制文件位于子文件夹中。有什么方法可以让我的 .gitattributes 文件递归地应用于子文件夹?
-
@hbCyber:gitattributes 指令集默认递归应用。但是,无论出于何种原因,这些指令在更高的目录中失败时,我总是在本地尝试相同的指令,在这些元素的直接父目录中。