Windows上的git autocrlf不提交CRLF行结尾?

时间:2016-08-11 16:29:43

标签: windows git

我以为我理解了autocrlf,但在我的git GUI中,默认设置为" Checkout Windows风格,提交Unix风格的行结尾(" core.autocrlf"设置为" true")",但我们实际上也喜欢使用CRLF提交的文件,因为服务器也是Windows。

我读错了还是打印错了?我们使用的具体工具是Git for Windows,Git Extensions和Git GUI。我不知道设置CRLF应该是什么设置。

1 个答案:

答案 0 :(得分:1)

我建议您执行CRLF转换,即使您正在Windows计算机上构建Windows软件并运行Windows服务器。

对Git本身假设的一些假设认为存储库中文件的行结尾是Unix风格的。如果你违反了这个假设,并做了一个非常合理的事情,比如用CRLF行结尾检查文件,就会发生奇怪的事情。

例如:如果您不进行行结束转换,git diff将创建包含不匹配行结尾的修补程序。这里我有一个在存储库中创建的文件,没有行结束转换(core.autocrlf = false而我没有.gitattributes)。我对一行进行了更改,然后运行git diff

git bash> git diff
diff --git a/file.txt b/file.txt
index f4606e9..45ec98f 100644
--- a/file.txt
+++ b/file.txt
@@ -3,7 +3,7 @@ with \r\n line endings.
 My git repository is configured
 with `core.autocrlf=false`, and
 I do not have a .gitattributes.
-I'm going to change this line
+I'm going to change THIS line^M
 in this file and see what the
 resultant patch file looks like.
 It's going to be ugly!

事实上,丑陋的是 - 你可以在添加的新行上看到尾随^M\r)。

处理本机Windows CRLF行结尾比Git的最后几个版本有所改进,但我仍然建议你遵循line ending best practices,即使你与Unix机器互操作。

服务器是否为Windows无关紧要。我甚至不确定你指的是哪个服务器:托管你的Git存储库的服务器(它不会检查文件,所以它根本不关心)或你所服务的服务器重新发布(通过使用正确的设置签出将获得CRLF)。

但是,即使你认为某些带有行结尾的奇怪事物是可以接受的(而且可能是这样),也不依赖于core.autocrlf

使用core.autocrlf的最佳做法是 ,他们要检查.gitattributes文件。 core.autocrlf影响您的计算机,它不会影响存储库。您需要所有存储库用户具有一致的行结束设置,无论您是否决定进行翻译(同样,我认为您应该)。否则,其他用户在安装Git for Windows时选择的core.autocrlf设置将导致每个人使用不同的行结尾检查事物,并且您将继续来回翻转它们人编辑他们,这真的很可怕。