我正在从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,我认为我的配置应该给我Linux上所有文本文件的LF。但是,它不起作用。我在工作区中得到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一起存储在存储库中。
答案 0 :(得分:2)
问题是您将core.autocrlf
设置为true。该文档说:
将此变量设置为“ true”与在所有文件上将text属性设置为“ auto”以及将core.eol设置为“ crlf”相同。如果要在工作目录中包含CRLF行尾,并且存储库中包含LF行尾,请设置为true。
您绝对不希望在Unix或Linux系统上将该变量设置为true
;除非您使用的是Windows系统(甚至还有更好的选择),否则应将其设置为false
。
答案 1 :(得分:1)
您很有可能设置了一些标志来告诉git搞乱EOL格式(这些标志一团糟)。如果您不想让git弄乱他们,可以通过将其添加到.gitattributes
中来实现:
* -text
这样,当您添加或签出文件时,git会弄乱文件。如果您需要其他类型的东西(例如真正的自动EOL转换),则可以在此处检查可用的东西。
https://git-scm.com/docs/gitattributes
无论哪种方式,请避免使用您在问题上使用的标志。他们是一团糟。
答案 2 :(得分:1)
Old, but still correct answer关于Git中的EOL头痛
简而言之:
core.autocrlf = false
core.eol = native
将在所有操作系统上产生正确的EOL