Git:将文本文件设为二进制文件,同时仍显示文本差异

时间:2014-05-05 10:14:43

标签: git

我的仓库中有一些特殊文件,虽然它们是文本文件,但在.gitattributes中标记为二进制文件,因此如果我们发生冲突,它们不会自动合并:我需要在一个文件夹中选择该文件的版本或其他。 (*)

但是,为了做出决定或查看不同提交之间的更改,显示这些文件的文本差异仍然很有用。 我可以使用外部差异工具来做到这一点,github实际上显示文本差异,但我想知道我是否可以配置git,以便它的内部差异工具以这种方式工作。

(*)我们正在使用Unity3D并将其内部数据文件存储为文本(预制件,场景等),以便在回购中有效地压缩它们。

2 个答案:

答案 0 :(得分:2)

binary是一个禁用差异,行结束规范化和合并的宏。你似乎真的只需要后者。为此,请尝试使用-merge。如果您也想禁用行结束规范化,请使用-merge -text

答案 1 :(得分:0)

您可以为这些文件定义一个特殊的diff过滤器。

要实现此目的,您需要将以下配置添加到.gitconfig文件中:(名称binary-text是任意的)

[diff "binary-text"]
     textconv = cat

textconv定义了将二进制文件转换为常用文本的工具,因为您的文件是通常的文本文件,简单cat就足够了。要启用差异,您必须为文件类型指定diff过滤器。

所以我们假设文件以.foo结尾。

现在将以下内容添加到.gitattribute文件中:

*.foo diff=binary-text

现在差异应该按预期工作。

有关详细信息,请参阅Pro Git书中的Customizing Git - Git Attributes章节。