【问题标题】:git autocrlf on Windows doesn't commit with CRLF line endings?Windows 上的 git autocrlf 不会以 CRLF 行结尾提交?
【发布时间】:2016-08-11 16:29:43
【问题描述】:

我以为我理解 autocrlf,但在我的 git GUI 中,默认设置是“签出 Windows 样式,提交 Unix 样式的行尾(“core.autocrlf”设置为“true”)”,但我们实际上喜欢使用 CRLF 提交的文件也是如此,因为服务器也是 Windows。

我读错了还是打印错了?我们使用的特定工具是 Git for Windows、Git Extensions 和 Git GUI。我不确定应该设置什么设置才能让 CRLF 无处不在。

【问题讨论】:

  • 将 core.autocrlf 设置为 input 而不是 true,根据 [docs](file:///C:/Apps/Git /mingw64/share/doc/git-doc/git-config.html):这个变量可以设置为输入,这种情况下不进行输出转换。

标签: windows git


【解决方案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)。

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

您的服务器是否为 Windows 并不重要。我什至不确定您指的是哪个服务器:托管您的 Git 存储库的服务器(它不检出文件,因此它根本不关心 )或您的服务器'重新发布到(通过使用正确的设置签出将获得 CRLF)。

但是,即使您认为其中一些带有行尾的怪事是可以接受的(而且它们可能是),也不要依赖core.autocrlf

最佳做法使用core.autocrlf,而是签入.gitattributes 文件。 core.autocrlf 影响你的机器,它不影响存储库。您需要所有存储库用户都具有一致的行尾设置,无论您决定进行翻译(我认为您应该再次翻译)与否。否则,其他用户在安装 Windows 版 Git 时选择的 core.autocrlf 设置将导致每个人签入具有不同行尾的内容,并且您将在每个人编辑时不断来回翻转它们他们,这真的很糟糕。

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2021-11-17
    • 2017-11-26
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多