我见过几个问题询问如何让 git 将文本文件视为二进制文件,但还没有看到相反的情况:
如何更改 git 将文本文件视为二进制文件的选择?我有一个文本文件,其中在某些配置字符串中使用 EOT 和 ETX 来分隔配置参数的各个部分。
例如,源代码包含这样的行:
INPUT 'ScrollRemote[EOT]no[ETX]NumDown[EOT]0[ETX]CalcWidth[EOT]no[ETX]MaxWidth[EOT]80[ETX]FetchOnReposToEnd[EOT]yes[ETX].....'
我希望将此文件视为文本,而不是二进制文件,以便我可以看到行更改的差异。
文件在 Git 存储库中实际存储的方式与显示时的处理方式无关。因此,当要求
git diff
程序比较两个文件时,它首先从存储库中获取两个完整的文件,然后对它们运行差异算法。
通常,
git diff
会在文件中查找不可打印的字符,如果它看起来像该文件可能是二进制文件,则它拒绝显示差异。其基本原理是二进制文件差异不太可能是人类可读的,并且如果显示可能会弄乱您的终端。
但是,您可以使用
git diff
选项指示 --text
始终将文件视为文本。您可以为一个 diff
命令指定这一点:
git diff --text HEAD HEAD^ file.txt
.gitattributes
文件使 Git 始终使用此选项:
file.txt diff
这里的
diff
属性的意思是:
设置了
属性的路径被视为文本,即使它们包含通常不会出现在文本文件中的字节值(例如 NUL)。diff
查看 Git 属性——它们可以通过指定将某个文件扩展名视为文本来帮助您。
如果您尝试比较或合并文本文件,而 git 说它们是二进制文件,则它们可能只是具有不同的编码(例如 UTF-8 和 ANSI)。确保文件编码未更改可能允许您使用 git 比较文件。请参阅我在这篇文章中给出的答案了解更多详细信息。