68

我见过几个问题,询问如何让 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].....'

我希望将此文件视为文本,而不是二进制文件,以便我可以看到行更改的差异。

4

3 回答 3

82

文件在 Git 存储库中的实际存储方式与它们在显示时的处理方式无关。因此git diff,当被要求比较两个文件时,程序首先从存储库中获取两个完整的文件,然后对它们运行差异算法。

通常,git diff在文件中查找不可打印的字符,如果文件看起来可能是二进制文件,则拒绝显示差异。这样做的理由是二进制文件差异不太可能是人类可读的,并且如果显示可能会弄乱您的终端。

但是,您可以使用该选项指示git diff始终将文件视为文本。您可以为一个命令--text指定此项:diff

git diff --text HEAD HEAD^ file.txt

您可以通过设置.gitattributes包含以下内容的文件使 Git 始终使用此选项:

file.txt diff

这里的diff属性意味着:

设置属性的路径diff被视为文本,即使它们包含通常不会出现在文本文件中的字节值,例如 NUL。

于 2013-02-21T17:57:06.390 回答
6

查看Git 属性——它们可以通过指定将某个文件扩展名视为文本来帮助您。

于 2013-02-20T22:28:52.890 回答
3

如果您尝试比较或合并文本文件并且 git 说它们是二进制文件,那么它们可能只是具有不同的编码(例如 UTF-8 和 ANSI)。请参阅我在这篇文章中给出的答案

于 2014-01-16T18:42:08.110 回答