我在ubuntu上使用git,autocrlf设置为true。我的编辑器被配置为使用LF作为行尾字符。在我编辑了一个文件并做了之后
git add .
我得到了:
warning: LF will be replaced by CRLF in file1.txt. (1)
The file will have its original line endings in your working directory. (2)
关于(1(,git为什么要将我文件中的LF转换为CRLF?只有当你的文件包含CRLF时,git才会尝试将CRLF转换为LF,它是否应该这样工作?
至于(2(,这是否意味着我正在查看的文件仍将只使用LF,但git暂存区中的快照已转换?
通过查看警告消息,我猜您的配置如下:
- 您使用的窗口
core.eol
设置为native
(git 1.7.2及以上版本中的默认值(,或者已明确将core.eol设置为crlf
- 您的core.autocrlf设置为
input
这些git attributes
、core.autocrlf
和core.eol
允许您配置行尾所需的内容及其可能的值,以及它们的含义,这些内容将在git手册页和这个stackoverflow答案中捕获
对于(1(和(2(,你的问题是,"因为你配置了它">
你应该做什么取决于你在哪个平台上,以及你将从哪个其他平台访问git。建议让git只存储LF
作为行尾,因为否则生成的blob哈希会发生更改,即使更改可能只是行尾字符,git也会抱怨"更改了行"。
由于您在Ubuntu上,您希望将core.eol
设置为lf
,将core.autocrlf
设置为input
,这样git就不会在工作树中将LF转换为CRLF。
如果您没有进行跨平台开发(尤其是使用Windows(,请将autocrlf设置为false,并让与您一起工作的人员也这样做。在git中将文件制成对象之前,无需更改文件。这是一个巨大的麻烦。在使用git的4年里,我从未处理过这个问题。除非您正在使用Windows执行x平台,否则请设置为false。简单修复。