Linux 有 CRLF 换行符问题吗?

nak*_*dev 3 linux git

我一直在和我的团队争论这个问题。在开发中,我们使用 Windows (CRLF),在服务器上我们使用 Linux (LF)。

如果 Linux 看到带有 CRLF 换行符的文件,是否有问题?Git 应该通过文件来处理这种情况吗.gitattributes

Phi*_*ing 6

大多数情况下,当您将文件上传到服务器时,Linux 内核本身并不知道或关心行结尾。尽管正如muru 所指出的那样,CRLF 会搞砸一个shebang

然而,Linux 中有一个约定,文本文件中的所有行都以单个 LF 结尾。许多工具会读取 CR 并将其视为任何其他常规字符(a、b、c...)。这来自文本文件的 POSIX 定义

可能会导致某些语言出现问题,例如 shell 脚本(sh、bash、zsh、ksh...)。如果幸运的话,脚本将因虚假的额外参数引起的语法错误而失败。然而,在糟糕的情况下,这可能会渗透到文件的内容和文件名中。

对于仅设计用于在 linux / unix 下运行的工具和语言来说,这主要是一个问题。许多独立于平台的语言和工具会自动适应。因此,您不太可能在IDE或代码编辑器中看到问题。


因此,为了试图结束你与同事的争论,没有一个 Linux 不存在 CRLF 行结尾的问题。 然而,如果您将某些工具和语言留在其中,它们可能会令人窒息或发生奇怪的事情。

如果您正在编写要在 Linux / Unix 平台上运行的代码,那么通常更容易配置 git 来删除任何 CR 字符,留下 LF 行结尾。

  • 我认为内核确实关心一个“极其”用户可见的地方的行结尾:shebang 行。 (2认同)