Git can';t在Linux上使用LF签出与CRLF一起存储的文件

Git can';t在Linux上使用LF签出与CRLF一起存储的文件,git,eol,core.autocrlf,Git,Eol,Core.autocrlf,我正在Linux上查看一个第三方项目“libjpeg”(这只是一个例子,实际上我在许多其他项目中也有同样的问题)。我有下面的Git行结尾配置 我只配置了全局设置(设置为使用LF行结尾签出): 没有关于行尾的本地(repo)设置 我读了这篇关于Git line endings配置的文章:我认为我的配置应该为Linux上的所有文本文件提供LF。但是,它不起作用。我在我的工作区得到了CRLF。例如: ~/gitclonetest/libjpeg$ file libjpeg.map libjpeg.ma

我正在Linux上查看一个第三方项目“libjpeg”(这只是一个例子,实际上我在许多其他项目中也有同样的问题)。我有下面的Git行结尾配置

我只配置了全局设置(设置为使用LF行结尾签出):

没有关于行尾的本地(repo)设置

我读了这篇关于Git line endings配置的文章:我认为我的配置应该为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存储在存储库中的。

您很可能设置了一些标志,告诉Git将EOL格式弄乱(这些标志是一团糟)。如果您希望git不要弄乱它们,可以将其添加到
.gittributes

* -text
这样git就不会在您添加或签出文件时弄乱文件。如果您需要其他类型的东西(例如,真正的自动下线转换),您可以在那里检查可用的东西


无论哪种方式,都不要使用你在问题上使用的标志。它们是一团糟。

您很可能设置了一些标志,告诉git将EOL格式弄糟(这些标志是一团糟)。如果您希望git不要弄乱它们,可以将其添加到
.gittributes

* -text
这样git就不会在您添加或签出文件时弄乱文件。如果您需要其他类型的东西(例如,真正的自动下线转换),您可以在那里检查可用的东西

无论哪种方式,都不要使用你在问题上使用的标志。他们真是一团糟。

关于Git的EOL头痛

简言之:

core.autocrlf = false 
core.eol = native
将在所有和任何操作系统组合上生成正确的EOL

关于Git中的EOL头痛

简言之:

core.autocrlf = false 
core.eol = native

将在所有操作系统和任何操作系统组合上生成正确的下线。问题是您的
core.autocrlf
设置为true。文件说明如下:

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


在Unix或Linux系统上,您肯定不想将该变量设置为
true
;它应该设置为
false
,除非您使用的是Windows系统(甚至还有更好的选择)。

问题是您的
core.autocrlf
设置为true。文件说明如下:

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


在Unix或Linux系统上,您肯定不想将该变量设置为
true
;它应该设置为
false
,除非您使用的是Windows系统(甚至还有更好的选择)。

您能告诉我您指的是哪些其他标志(在哪里检查它)?我想除了上面描述的,我没有别的东西了。另一个问题:您建议使用.gittributes。。首先,我无法将此文件添加到repo,因为它是一个外部repo(不是我开发的)。第二,我的问题是理解为什么如果我做的一切都是正确的,那么默认配置就不起作用。我还应该检查什么?@AlexanderSamoylov这些旗帜就是你在问题中描述的那些。他们真是一团糟。它们就像git上EOL处理的第一次迭代。然后创建了第二个(使用属性的)。只有将相同的内容添加到
.git/info/attributes
中,您才能在回购协议中拥有相同的内容。这里有很多关于如何做这些事情的好信息,希望它能满足你的要求:正如我上面告诉你的,我不能修改回购协议。但是我读了你的链接并尝试了全局/etc/gittributes文件。这没有帮助。我尝试的第二个是:“git config--system core.eol lf”,它与core.autocrlf的所有3个不同值(输入、假、真)组合在一起。这也没什么帮助。关于我的标志中的“混乱”…实际上我只设置了2个标志:在用户(--global)级别上的core.eol和core.autocrlf。在我的问题中,我发布了另一个来说明其他的没有设置。你能在你的主机上尝试克隆libjpeg并给我这样一个全局标志组合,使它可以用LF克隆吗?我只是想知道是否有其他人能做到这一点。@AlexanderSamoylov我并不是说你的计划一团糟。我的意思是,您使用的标志的实现在git中是一团混乱。和
.git/info/attributes
可以在本地回购协议上修改,而不会影响原始回购协议或分支机构。请告诉我您指的是哪些其他标志(在哪里检查)?我想除了上面描述的,我没有别的东西了。另一个问题:您建议使用.gittributes。。首先,我无法将此文件添加到repo,因为它是一个外部repo(不是我开发的)。第二,我的问题是理解为什么如果我做的一切都是正确的,那么默认配置就不起作用。我还应该检查什么?@AlexanderSamoylov这些旗帜就是你在问题中描述的那些。他们真是一团糟。它们就像git上EOL处理的第一次迭代。然后创建了第二个(使用属性的)。只有在以下情况下,你才能在回购协议上拥有同样的东西