有两个 git config 属性会影响行尾:core.autocrlf
和core.eol
.
以前,您被告知使用core.autocrlf = true
能够处理跨平台项目,但现在不再如此true
。
如果您的系统/IDE/工具支持LF
并且您确实想像团队中的其他人一样使用LF
而没有任何静默lf->crlf->lf
规范化,则必须关闭autocrlf
并配置eol
为不推断native
行尾,而是强制它使用lf
.
现在有两种方法可以LF
在所有文件中实现 a/o repos:
- 全局用于本地计算机上的所有存储库。
.gitattributes
通过签入文件的每个存储库。
此文件会覆盖克隆存储库的每个人的任何本地配置。
我个人建议同时使用所有本地存储库并确保跨平台跨开发一致性。
1)全局用于本地计算机上的所有存储库
在您的工作目录(您的本地仓库)中:
首先提交所有内容
让我们有点偏执,并在全局和 repo 中设置它。以防万一。
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 忽略的文件。
最后运行
git reset --hard HEAD
事情现在应该工作了。新检查的文件应遵循新配置并保留从远程存储库克隆的任何行尾。
请注意,如果您的远程仓库使用混合crlf
lf
结尾,您还必须运行并推送
git add --renormalize .
.gitattributes
2)通过签入文件的每个存储库
在您的工作目录(您的本地仓库)中:
.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 系统上的首选值。
https://stackoverflow.com/a/41282375/985454
https://stackoverflow.com/a/4425433/985454
故障排除
使用第三个选项重新安装 git for windows(如 Q 中的屏幕截图所示)
按原样结帐 - 按原样提交 ( core.autocrlf = false
)