2020 年如何在 Windows 版 Git 中永久使用“LF”行结尾?

Qwe*_*rty 11 git line-endings editorconfig git-for-windows

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

在此输入图像描述

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

.editorconfig
root = true

[*]
end_of_line = lf
Run Code Online (Sandbox Code Playgroud)

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

Qwe*_*rty 21

有两个 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. 让我们偏执一点,在全局和仓库中都设置它。万一。

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

  4. 最后运行

    git reset --hard HEAD
    
    Run Code Online (Sandbox Code Playgroud)

现在应该可以正常工作了。新检查的文件应遵循新配置并保留从远程存储库克隆的所有行结尾。

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

git add --renormalize .
Run Code Online (Sandbox Code Playgroud)

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

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

  1. .gitattributes在根目录中创建包含以下内容的文件:

    * text=auto eol=lf
    
    Run Code Online (Sandbox Code Playgroud)
  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 系统上的首选值。 /sf/answers/2889766281/
/sf/answers/309780341/

故障排除

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

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


归档时间:

查看次数:

12545 次

最近记录:

5 年,2 月 前