我在mac上编程,我真的不明白Git对我文件行的结尾做了什么:
我创建了一个存储库,其中包含 Unix格式的某些文件(LF行尾)。
当我克隆我创建的存储库时,所有行的结尾都是CRLF 。它不应该自动检测到我需要LF结束线吗?
我 autoclrf 设置为 true。
GIT关于autoclrf的文档很难理解:
如果您只想在工作目录中拥有CRLF行结尾,而不管您正在使用哪个存储库,则可以设置配置变量“core.autocrlf”而不更改任何属性。
[芯]
autocrlf = true
这不会强制所有文本文件的规范化,但确保引入存储库的文本文件在添加时将其行结尾标准化为LF,并且已在存储库中标准化的文件保持规范化。
第一句话说“如果你想拥有所有的crlf”,当第二句话说git会自动调整行尾。
就我而言,似乎Git会将所有内容转换为CRLF,并在我尝试克隆时将其保留。
答案 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
时,有两个调整方向:
您要做的第一件事是取消设置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正确结束。