在git中将文件设置为非二进制

时间:2013-11-01 08:07:52

标签: git

我有一个包含许多.cs文件的文件夹。其中一些文件(由于某种原因)被跟踪为二进制文件,git diff命令无法正常使用它们。 我尝试将所有这些文件重新保存为UTF-8编码,但它没有帮助。我尝试更改目录,目录名称,文件名和文件扩展名,所有这些都有帮助。

我也尝试修改.gitattributes文件以将* .cs文件视为非二进制文件,但它对我没有帮助:

*.cs diff=csharp

我需要一种方法将所有这些文件设置为非二进制文件,而不更改其路径或名称。有这样的方式吗?

3 个答案:

答案 0 :(得分:13)

你可以这样做以强制git认为它是文本:

 *.cs diff

你需要确保它实际上是文本。 强制Git认为你的文件实际上不是文本会在各种情况下导致非常糟糕的行为

您可能还需要设置其他几个属性:

 *.cs diff merge text

该文本对EOL规范化很有用。如果Git在合并时仍认为文件是二进制文件,则可能需要合并。

然而,真正的问题是“为什么Git将我的文件标记为二进制文件?”答案是因为它在文件的前8000个字符内的某处看到了NUL(0)字节。通常,这是因为文件被保存为UTF-8以外的其他内容。因此,它可能被保存为UCS-2,UCS-4,UTF-16或UTF-32。所有这些都在使用ASCII字符时嵌入了NUL字符。因此,虽然您的问题表明您已将文件重新保存为UTF-8,但您可能需要再次使用十六进制编辑器进行检查。我怀疑它们不是UTF-8,而且这是问题的核心。

答案 1 :(得分:1)

使用 Notpad++ 更改编码,而不是带有字节顺序标记 (BOM) 的编码。目前,git 将这些顶级 BOM 字符 (\0xFF\0xFE) 视为二进制文件的开头。

Notepad++ Encoding Menu

答案 2 :(得分:0)

在Sourcetree版本3.1.2中:

-工具>选项>差异

-向“大小限制(文本)”添加一个额外的零

-向“大小限制(二进制)”添加一个额外的零

-单击“确定”

-查看>刷新(或F5)