首页 > 解决方案 > Git 无法使用 LF 在 Linux 上签出使用 CRLF 存储的文件

问题描述

我正在从 Linux 上的https://github.com/winlibs/libjpeg检查一个第三方项目“libjpeg” (这只是一个例子,实际上我对许多其他项目也有同样的问题)。我有以下 Git 行尾配置。

我只配置了全局设置(设置为以 LF 行结尾结帐):

$ git config --system -l | grep core
core.eol=lf
core.autocrlf=false

$ git config --global -l | grep core
core.eol=lf
core.autocrlf=false

没有关于行尾的本地(回购)设置。

我读了这篇关于 Git 行尾配置的文章:https ://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line我认为我的配置应该给我所有文本文件的 LF在 Linux 上。但是它不起作用。我在我的工作区中得到了 CRLF。例如:

~/gitclonetest/libjpeg$ file libjpeg.map
libjpeg.map: ASCII text, with CRLF line terminators
~/gitclonetest/libjpeg$ cat -v libjpeg.map
LIBJPEG_9.0 {^M
  global:^M
    *;^M
};^M

有人可以帮助我了解我所缺少的吗?我的目标是当我在 Linux 主机上克隆它时,将所有文本文件(对于任何项目)自动转换为 LF。

更新:目标是将 Git 配置为使用 LF 在 Linux 主机上签出,即使当时文件是使用 CRLF 存储在存储库中的。

标签: giteolcore.autocrlf

解决方案


问题是您已core.autocrlf设置为true。该文档说明了以下内容:

将此变量设置为“true”与将所有文件的文本属性设置为“auto”以及将 core.eol 设置为“crlf”相同。如果您想在工作目录中使用 CRLF 行结尾并且存储库具有 LF 行结尾,请设置为 true。

您绝对不想true在 Unix 或 Linux 系统上设置该变量;false除非您使用的是 Windows 系统,否则它应该设置为(即使这样也有更好的选择)。


推荐阅读