将 git 对二进制文件的选择覆盖为文本

问题描述 投票:0回答:3

我见过几个问题询问如何让 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 text binary
3个回答
92
投票

文件在 Git 存储库中实际存储的方式与显示时的处理方式无关。因此,当要求

git diff
程序比较两个文件时,它首先从存储库中获取两个完整的文件,然后对它们运行差异算法。

通常,

git diff
会在文件中查找不可打印的字符,如果它看起来像该文件可能是二进制文件,则它拒绝显示差异。其基本原理是二进制文件差异不太可能是人类可读的,并且如果显示可能会弄乱您的终端。

但是,您可以使用

git diff
选项指示
--text
始终将文件视为文本。您可以为一个
diff
命令指定这一点:

git diff --text HEAD HEAD^ file.txt

您可以通过设置包含以下内容的

.gitattributes
文件使 Git 始终使用此选项:

file.txt diff

这里的

diff
属性的意思是:

设置了

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


6
投票

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


2
投票

如果您尝试比较或合并文本文件,而 git 说它们是二进制文件,则它们可能只是具有不同的编码(例如 UTF-8 和 ANSI)。确保文件编码未更改可能允许您使用 git 比较文件。请参阅我在这篇文章中给出的答案了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.