我如何才能在 2020 年将 Git 中的 `LF` 行结尾永久用于 Windows?

How can I use `LF` line endings in Git for Windows in 2020 for good?

我们的存储库使用 LF,我的 Git Windows 安装使用 按原样检查,提交 Unix 风格的行结尾

但我在 IDE 中检出的每个文件中仍然会出现大量错误,因为它仍然始终收到 CRLF,即使它确实支持 LF 并且是通过签入 .editorconfig 文件(或在其自己的设置中)配置为使用 LF。:

.editorconfig
root = true

[*]
end_of_line = lf

It is 2020 already and IDEs and tooling already support LF on Windows, so how can I have the nice things too?

有两个 git 配置属性会影响行结尾:core.autocrlfcore.eol.
以前,您被告知要使用 core.autocrlf = true 才能处理跨平台项目,但它不再是 true

如果您的 system/IDE/tooling 支持 LF 并且您 确实希望 像团队中的其他人一样使用 LF 并且没有任何沉默 lf->crlf->lf 规范化,您必须关闭 autocrlf 并配置 eol 不推断 native 行结尾,而是强制它使用 lf.

现在有两种方法可以在您的所有文件 a/o 回购中实现 LF

  1. 本地计算机上所有存储库的全局。
  2. 通过签入的每个存储库 .gitattributes 文件。
    此文件覆盖所有克隆该存储库的人的任何本地配置。

我个人建议对所有本地存储库同时使用两者,以确保跨平台、跨开发人员的一致性。


1) 全局适用于本地计算机上的所有存储库

在您的工作目录中(您的本地存储库):

  1. 首先提交所有内容

  2. 让我们有点偏执,并在全局和回购中设置它。以防万一

    git config --global core.eol lf
    git config --global core.autocrlf false
    
    git config core.eol lf
    git config core.autocrlf false
    
  3. 删除除 .git 以外的所有“代码”。
    您还可以省略依赖项、已安装的文件(例如 node_modules)、构建文件和任何 git-ignored 文件。

  4. 最后 运行

    git reset --hard HEAD
    

现在一切正常。新检查的文件应遵循新配置并保留从远程仓库克隆的任何行尾。

请注意,如果您的远程仓库混合使用 crlf lf 结尾,您还必须 运行 和 push

git add --renormalize .

2) 通过签入的每个存储库 .gitattributes 文件

在您的工作目录中(您的本地存储库):

  1. 在根目录中创建 .gitattributes 文件,内容如下:

    * text=auto eol=lf
    
  2. 提交文件(以及其他所有内容)

  3. 同上

  4. 同上

重要说明:将文件引入存储库后,仍然有旧 CRLF 文件的每个人都必须执行第 3 步和第 4 步来更新他们的工作目录,因为检查提交不会影响已经存在的文件。


注释

core.autocrlf 设置为 trueinput 覆盖 core.eol

https://www.git-scm.com/docs/git-config#Documentation/git-config.txt-coreautocrlf

core.autocrlf = input 是 unix 系统上的首选值。

疑难解答

使用第三个选项为 windows 重新安装 git(如 Q 中的屏幕截图所示)

Checkout as is - Commit as is (core.autocrlf = false)

要走的路是使用 .gitattributes 和好的指导给 git。

https://www.edwardthomson.com/blog/git_for_windows_line_endings.html

对于你的情况,应该是:* text=auto eol=lf

.editorconfig仅供支持的编辑器保存文件...

但在那之后,您将必须规范化文件:

git add --renormalize .

您会发现这个答案很有用: