行尾行为和 Git

End-of-Line Behavior and Git

我是 Git 的新手。我以前用过 GitHub,但最近我开始在我的系统本地使用 Git 本身来进行版本控制。

我在 Windows 系统上。但是,我正在处理一些最初在 Mac 上创建的文件。因此,每当我暂存文件时,都会收到以下警告:

警告:LF 将在 contact.html 中被 CRLF 取代。 该文件将在您的工作目录中具有其原始行结尾

现在,我之前发现的关于这个主题的每个问题基本上都是一群人一遍又一遍地解释设置 (core.autocrlf = true) 的目的。手册页非常清楚,在 Windows 系统上,'true' 应该导致工作目录中的 CRLF,但所有提交都将在 repo 中转换为 LF。我明白了。

1) 为什么这条消息措辞如此糟糕。听起来倒退。最初的行尾(至少最初)是 LF。那不应该在我的工作目录中。听起来好像它在向我保证它将在工作目录中保留为 LF,但在回购中为 CRLF。与我想要的相反。

2) 假设 'core.autocrlf=true' 给出了我想要的行为(回购中的 LF ---- 工作副本中的 CRLF)。我如何禁用这个非常混乱的消息,这样我就不会在每次 'git add' 时看到它?如果我处理多个文件,它会造成很多视觉混乱。

此消息表示您的工作树中有以 LF 结尾的文件。这是有道理的,因为它们是在 Mac 上创建的,并且所有现代版本的 macOS 都使用 LF 结尾。但是,如果您提交它们然后检查它们,您将以 CRLF 行结尾结束,因为您在 Windows 上并且设置了 core.autocrlf。这就是消息的意思。下次出于任何原因检出文件时,工作树中的 LF 结尾将被替换。

至少在原则上,这个想法是警告您,您的行结尾将不会被保留,以防万一。也许您正在使用 shell 脚本,即使在 Windows 上,shell 也需要 LF 结尾。所以你想添加一个条目到 .gitattributes.

如果您对二进制文件执行某些行结束转换会导致损坏的操作,它也会帮助您发出警告。毕竟,如果更改其所有 0x0a 和 0x0d 字节,您喜欢的 JPEG 图像将无法正常工作。

如果需要,您可以通过将 core.safecrlf 设置为 false 来关闭此警告。