首页 > 解决方案 > 如何在 2020 年的 Git for Windows 中永久使用“LF”行尾?

问题描述

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

在此处输入图像描述

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

.editorconfig
root = true

[*]
end_of_line = lf

已经是 2020 年了,IDE 和工具已经LF在 Windows 上得到支持,那么我怎样才能拥有这些好东西呢?

标签: gitline-endingseditorconfiggit-for-windows

解决方案


有两个 git config 属性会影响行尾:core.autocrlfcore.eol.
以前,您被告知使用core.autocrlf = true能够处理跨平台项目,但现在不再如此true

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

现在有两种方法可以LF在所有文件中实现 a/o repos:

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

我个人建议同时使用所有本地存储库并确保跨平台跨开发一致性。


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

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

  1. 首先提交所有内容

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

    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 忽略的文件。

  4. 最后运行

    git reset --hard HEAD
    

事情现在应该工作了。新检查的文件应遵循新配置并保留从远程存储库克隆的任何行尾。

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

git add --renormalize .

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

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

  1. .gitattributes使用以下内容在根目录中创建文件:

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

  3. 和上面一样

  4. 和上面一样

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

git 硬重置


笔记

设置core.autocrlftrueinput覆盖core.eol

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

core.autocrlf = input是 Unix 系统上的首选值。 https://stackoverflow.com/a/41282375/985454
https://stackoverflow.com/a/4425433/985454

故障排除

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

按原样结帐 - 按原样提交 ( core.autocrlf = false)


推荐阅读