git:提交后将文件类型从二进制更改为文本

3

你好,

我在一个git仓库中遇到了一个问题,其中一个文件被检测为二进制文件而不是文本文件(通过git dif --stat检查)。该项目几年前从svn转换过来,所以我无法真正改变过去。我现在尝试将文件转换为utf8(没有bom)文件,但是git告诉我(通过git diff --stat),它对于git来说是二进制的。

是否有可能在提交后更改文件的基本类型(文本|二进制)?


1
Git不会为文件存储"类型",它会检查文件内容并根据此判断是否为二进制文件。相关链接:https://dev59.com/E2w15IYBdhLWcg3wD3hk - 1615903
1
可能是为什么Git认为我的cs文件是二进制的?的重复问题。 - 1615903
1
嘿,这个链接对我没有帮助。我的文件只有ASCII字符,但是git diff --stat显示为二进制文件。其他所有文件都被检测为非二进制文件。那么我应该改变什么才能达到效果呢?我已经创建了一个新的ASCII文件并在其中写入了一个字符,但它仍然被识别为二进制文件。 - Michael Aigner
1
那么gitattributes文件呢,你有吗?这个文件的扩展名是什么?现在文件有多大? - Lasse V. Karlsen
3
如果你运行 git diff,Git 将会检查当前内容和以前的内容;如果之前的内容“看起来像二进制”,git diff 仍然会显示为“二进制”。只有当两个输入看起来像文本,或者被强制视为文本时,Git 才会尝试将它们作为文本进行比较。我的第一个猜测是你在 Windows 上,并且该文件存储为 UTF-16,因此大多数字符都是带有全零位的上字节对,Git 将其视为二进制。而你替换整个文件只包含内容 'a'。 - torek
显示剩余4条评论
1个回答

1

这些评论基本上解释了情况。

如果先前的提交被检测为二进制文件,则Git diff将列出二进制文件。

(在我的情况下,.gitignore是二进制文件,因为当我在Windows cmd/powershell提示符中首次创建它并使用ECHO .vs >> .gitignore添加其他内容时,其中既有英文又有中文)

因此,如果您真的希望下一个diff显示该文件的文本,则可以通过两个提交来解决它。

  1. 第一个提交包含正确的编码和简单的文本短语。
  2. 第二个提交包含正确的内容和正确的编码。

现在,当Git比较最后一次更改时,它将比较文本与文本,并且在以后比较该文件时也是如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接