如何告诉 git 专门为一组文件保留 CRLF?将文本文件标记为二进制文件?

How to tell git to preserve CRLF specifically for a single set of files? Mark a text file as binary?

我想将存储库中的一些文本文件设置为 cloned/downloaded 二进制文件。即:绕过 git 中的 CRLF 设置,每个字节只克隆一个字节。

上下文

git 中有无数关于 CRLF 的帖子。但通常它们是关于整个项目的常规设置,主要取决于您使用Linux还是Windows。

但我面临着前所未有的情况。我愿意在我的项目中设置一个文件夹,其中包含由 RFC 5322 定义的示例电子邮件,它定义电子邮件的行尾恰好是 CRLF。这是一个与电子邮件相关的项目,将用于单元测试。

如果我让系统随意处理文本文件,在许多情况下,这些文件将下载为 LF

我希望那几个文件被“强制”以“二进制模式”下载,所以无论您在什么平台或设置下执行 git clone,这些文件都不会丢失一个字节;否则他们会破坏标准。

问题

您确实可以在 .gitattributes 文件中将这些文件标记为二进制文件,但这将防止它们被区分和合并,这可能不是您想要的。更简单的方法是将它们指定为具有 CRLF 行结尾,如下所示:

*.mbox eol=crlf

这将强制将这些文件以 CRLF 结尾写入工作树,而不管平台如何。如果您出于某种原因想要将它们标记为二进制,则可以将 eol=crlf 替换为 binary。例如,如果您的电子邮件包含原始的 8 位未编码数据,您可能希望这样做。