我如何才能在 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.autocrlf
和 core.eol
.
以前,您被告知要使用 core.autocrlf = true
才能处理跨平台项目,但它不再是 true
。
如果您的 system/IDE/tooling 支持 LF
并且您 确实希望 像团队中的其他人一样使用 LF
并且没有任何沉默 lf->crlf->lf
规范化,您必须关闭 autocrlf
并配置 eol
不推断 native
行结尾,而是强制它使用 lf
.
现在有两种方法可以在您的所有文件 a/o 回购中实现 LF
:
- 本地计算机上所有存储库的全局。
- 通过签入的每个存储库
.gitattributes
文件。
此文件覆盖所有克隆该存储库的人的任何本地配置。
我个人建议对所有本地存储库同时使用两者,以确保跨平台、跨开发人员的一致性。
1) 全局适用于本地计算机上的所有存储库
在您的工作目录中(您的本地存储库):
首先提交所有内容
让我们有点偏执,并在全局和回购中设置它。以防万一
git config --global core.eol lf
git config --global core.autocrlf false
git config core.eol lf
git config core.autocrlf false
删除除 .git
以外的所有“代码”。
您还可以省略依赖项、已安装的文件(例如 node_modules
)、构建文件和任何 git-ignored 文件。
最后 运行
git reset --hard HEAD
现在一切正常。新检查的文件应遵循新配置并保留从远程仓库克隆的任何行尾。
请注意,如果您的远程仓库混合使用 crlf
lf
结尾,您还必须 运行 和 push
git add --renormalize .
2) 通过签入的每个存储库 .gitattributes
文件
在您的工作目录中(您的本地存储库):
在根目录中创建 .gitattributes
文件,内容如下:
* text=auto eol=lf
提交文件(以及其他所有内容)
同上
同上
重要说明:将文件引入存储库后,仍然有旧 CRLF 文件的每个人都必须执行第 3 步和第 4 步来更新他们的工作目录,因为检查提交不会影响已经存在的文件。
注释
将 core.autocrlf
设置为 true
或 input
覆盖 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 .
您会发现这个答案很有用:
我们的存储库使用 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.autocrlf
和 core.eol
.
以前,您被告知要使用 core.autocrlf = true
才能处理跨平台项目,但它不再是 true
。
如果您的 system/IDE/tooling 支持 LF
并且您 确实希望 像团队中的其他人一样使用 LF
并且没有任何沉默 lf->crlf->lf
规范化,您必须关闭 autocrlf
并配置 eol
不推断 native
行结尾,而是强制它使用 lf
.
现在有两种方法可以在您的所有文件 a/o 回购中实现 LF
:
- 本地计算机上所有存储库的全局。
- 通过签入的每个存储库
.gitattributes
文件。
此文件覆盖所有克隆该存储库的人的任何本地配置。
我个人建议对所有本地存储库同时使用两者,以确保跨平台、跨开发人员的一致性。
1) 全局适用于本地计算机上的所有存储库
在您的工作目录中(您的本地存储库):
首先提交所有内容
让我们有点偏执,并在全局和回购中设置它。以防万一
git config --global core.eol lf git config --global core.autocrlf false git config core.eol lf git config core.autocrlf false
删除除
.git
以外的所有“代码”。
您还可以省略依赖项、已安装的文件(例如node_modules
)、构建文件和任何 git-ignored 文件。最后 运行
git reset --hard HEAD
现在一切正常。新检查的文件应遵循新配置并保留从远程仓库克隆的任何行尾。
请注意,如果您的远程仓库混合使用 crlf
lf
结尾,您还必须 运行 和 push
git add --renormalize .
2) 通过签入的每个存储库 .gitattributes
文件
在您的工作目录中(您的本地存储库):
在根目录中创建
.gitattributes
文件,内容如下:* text=auto eol=lf
提交文件(以及其他所有内容)
同上
同上
重要说明:将文件引入存储库后,仍然有旧 CRLF 文件的每个人都必须执行第 3 步和第 4 步来更新他们的工作目录,因为检查提交不会影响已经存在的文件。
注释
将 core.autocrlf
设置为 true
或 input
覆盖 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 .
您会发现这个答案很有用: