Git使所有签出文件的行尾CRLF

时间:2010-09-01 18:57:24

标签: windows linux git macos

我在mac上编程,我真的不明白Git对我文件行的结尾做了什么:

我创建了一个存储库,其中包含 Unix格式的某些文件(LF行尾)

当我克隆我创建的存储库时,所有行的结尾都是CRLF 。它不应该自动检测到我需要LF结束线吗?

autoclrf 设置为 true。

GIT关于autoclrf的文档很难理解:

  

如果您只想在工作目录中拥有CRLF行结尾,而不管您正在使用哪个存储库,则可以设置配置变量“core.autocrlf”而不更改任何属性。

     

[芯]

   autocrlf = true
     

这不会强制所有文本文件的规范化,但确保引入存储库的文本文件在添加时将其行结尾标准化为LF,并且已在存储库中标准化的文件保持规范化。

第一句话说“如果你想拥有所有的crlf”,当第二句话说git会自动调整行尾。

就我而言,似乎Git会将所有内容转换为CRLF,并在我尝试克隆时将其保留。

3 个答案:

答案 0 :(得分:5)

gitattributes手册页的布局很差。在后面的部分中,您将找到:

  

core.eol配置变量控制git将用于工作目录中规范化文件的行结尾;默认设置是使用您平台的原生行结尾,或CRLF如果设置了core.autocrlf

因此,除非您已指定core.eol,否则无论您是否使用Apple Mac OS X,Microsoft Windows,您最终都会被CR + LF字符终止。或Ubuntu Linux。

从你的问题:

  

第一句话说"如果你想要所有的crlf",当第二句话说git会自动调整行尾。

值得注意的是,core.autocrlf设置为true时,有两个调整方向:

  • CR + LF将成为存储库/存储库中的LF。也就是说,提交文件和存储库后端将在行尾添加LF在文本文件中。这可以使您的提交历史中的内容保持一致,如果您的同事之一使得差异/比较变得更容易。 IDE决定神奇地将你的LF转换为CR + LF(谁想在他们的差异中看到它?)。我想,你也可以节省几个字节的硬盘空间。
  • LF将成为工作目录中的CR + LF 在签出文件系统中,任何新文本文件都会以CR + LF结尾的行一旦git触及它。即使文件在第一次创建时以明细LF结尾的行也会发生这种情况。

您要做的第一件事是取消设置core.autocrlf或将其设置为false。如果您希望签出文本文件以符合用户的操作系统首选行结尾,无论它们是如何创建的,只需将其添加到.gitattributes:

* text=auto

或者,如果git不擅长猜测哪些文件是文本,您可以声明一个特定的扩展名来进行这种双向规范化:

*.ext text

(其中ext是有问题的文件扩展名)

答案 1 :(得分:3)

当您将core.autocrlf设置为true时,Git会在提交到repo时将行结尾转换为LF,但会使用适合您平台的行结尾将文件写入工作树设置(Mac / Unix / Linux上的LF,Windows上的CRLF

答案 2 :(得分:1)

是的,当autocrlf设置为true时,您应该在Windows上的工作树中看到CRLF,其中包括浏览资源管理器时的情况。如果您推送到Linux repo,您​​应该看到所有文件都以LF正确结束。