为什么GIT在写入工作目录时没有用LF替换CRLF,尽管core.autocrlf设置为输入?

时间:2016-03-07 00:23:22

标签: git core.autocrlf

最近,我使用gits选项core.autocrlf摆弄并将其设置为input。我测试了配置参数是否设置正确:

$ git config --global core.autocrlf
input

$ git config core.autocrlf
input

然后测试gits行为我删除了项目文件夹的所有内容(当然除了文件夹.git)并做了一个

git reset --hard HEAD

但是我的编辑告诉我,行结尾仍然是CRLF

为什么?

(我在Ubuntu上使用Atom作为编辑器。编辑器声明似乎是有效的,因为当我告诉它将所有行结尾更改为LF时,git告诉我文件的每一行都被更改了。)

要了解有关整个主题的更多信息,请阅读以下文章:

Mind the End of Your Line

3 个答案:

答案 0 :(得分:2)

core.autocrlf=input只会在将它们添加到索引(并提交它们)时采用文件结尾。

它不会在去往工作区的路上修改文件。您需要使用true - 主要用于较旧的Mac和Windows,其中本机行结尾不是LF。

但很有可能.gitattributes对你来说是更好的系统,正如你提到的那篇文章所讨论的那样。

答案 1 :(得分:2)

来自the manual

  

如果您使用的是使用LF行结尾的Linux或Mac系统,那么您不希望Git在您签出文件时自动转换它们;但是,如果意外引入了CRLF结尾的文件,那么您可能希望Git修复它。您可以告诉Git 在提交时将CRLF转换为LF ,而不是通过将core.autocrlf设置为输入

来反过来

它只在提交时进行转换。显然。

答案 2 :(得分:2)

<强> core.autocrlf=input

不会更新现有文件。它只会将添加的文件行结尾设置为所需的格式。

  

<强> core.autocrlf

     

将此变量设置为true几乎与在所有文件上将text属性设置为auto几乎相同,只是文本文件不能保证规范化:存储库中包含CRLF的文件不会感动。

     

如果要在工作目录中包含CRLF行结尾,请使用此设置,即使存储库没有标准化的行结尾。

     

<强> This variable can be set to input, in which case no output conversion is performed 即可。

  

core.autocrlf=input

     

这意味着Git将处理所有文本文件,并确保在将 该文件写入对象数据库时将CRLF替换为LF 。但是,它不会反过来。