git:如何在不禁用safecrlf的情况下消除“警告:CRLF将被LF替换”的问题?

57
我是git的新手,阅读了很多关于行尾和git如何处理它们的文章。顺便说一下,我正在使用Windows。我已经创建了一个.gitattributes文件,并将*.txt设置为文本格式。当我提交.txt文件时,会收到警告:
“warning: CRLF will be replaced by LF in whatever.txt”
但我知道这一点。我不需要那个警告。替换文本文件中的行尾是我想要的。
现在,将safecrlf设置为false可以消除警告,但是safecrlf的手册上写道:
“如果为true,则使git在活动的换行符转换时检查CRLF是否可逆。 Git将验证命令是否直接或间接地修改工作树中的文件。例如,提交文件后再检出相同的文件应该在工作树中产生原始文件。如果对于core.autocrlf的当前设置不是这种情况,git将拒绝该文件。”
从那以后,safecrlf似乎是一个好主意。然而,我不明白为什么将safecrlf设置为true会给我带来有关我的文本文件的警告;在我看来,这些是不同的问题--有关文本文件的警告和可逆性的检查。实际上,git没有拒绝我的文件。
我能否摆脱文本文件的警告,并仍然保持safecrlf的设置?还是我误解了什么?

1
为什么文件没有被转换成Windows风格的文件?我认为这个警告很好,因为git告诉你它以某种方式修改了文件。真正的解决方案是不要让文件处于需要git修改的状态。如果你从中央仓库克隆,你可能会对其他人造成危险。 - cforbish
cforbish 我认为这是一个 Windows 风格的文件。它包含 CRLF,并且将使用 LF 结尾提交。但我知道这一点。 - oskarkv
oskarkv,对于误解我感到抱歉。你是否使用vim/gvim?如果是的话,你可以使用:set ff=unix将文件转换为Linux风格文件,以避免警告。这实际上会修改文件,因此您需要使用:w保存。 - cforbish
我发现更好的解决方案是始终保持行尾符不变,并使用.editorconfig来保持一致性... 在Windows和Mac上,大多数IDE实际上都可以使用任何行尾符(只要确保每个人都安装了插件)。 - Sam Salisbury
4个回答

16
据我所知,将core.safecrlf设置为false是关闭该警告的唯一方法。
如果您的属性设置正确,则通常不需要使用safecrlfsafecrlf的目的是防止在存储库中具有混合(或非LF)行结尾的文件中进行规范化。它只有与core.autocrlf结合使用才真正有用(以确保其自动猜测不会破坏任何内容),而且如果您通过.gitattributes设置自己的属性,则可以关闭所有这些内容。

11

在你的.gitattributes文件中,你可以:

# normalize text files to use lf
text eol=lf

# except these which we want crlf
*.txt eol=crlf

你还可以通过差异的方式做一些有趣的事情,例如 *.cs eol=crlf diff=csharp - Ian Mariano
2
那并没有回答我的问题。 - oskarkv

7
您的问题的答案是“不可以”。 因为基本上core.safecrlf设置控制“警告级别”: false-无需警告继续进行; warn-带警告继续进行; true-不要继续进行。 所以您必须选择最适合您的选项。

1
使用
$ git config core.autocrlf false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接