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

Cre*_*gic 8 git

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

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

*.cs diff=csharp
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ter 14

你可以这样做迫使git认为它是文本:

 *.cs diff
Run Code Online (Sandbox Code Playgroud)

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

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

 *.cs diff merge text
Run Code Online (Sandbox Code Playgroud)

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

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