我有一个包含许多.cs文件的文件夹。其中一些文件(由于某种原因)被跟踪为二进制文件,git diff
命令无法正常使用它们。
我尝试将所有这些文件重新保存为UTF-8编码,但它没有帮助。我尝试更改目录,目录名称,文件名和文件扩展名,所有这些都有帮助。
我也尝试修改.gitattributes文件以将* .cs文件视为非二进制文件,但它对我没有帮助:
*.cs diff=csharp
我需要一种方法将所有这些文件设置为非二进制文件,而不更改其路径或名称。有这样的方式吗?
答案 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)
答案 2 :(得分:0)
在Sourcetree版本3.1.2中:
-工具>选项>差异
-向“大小限制(文本)”添加一个额外的零
-向“大小限制(二进制)”添加一个额外的零
-单击“确定”
-查看>刷新(或F5)