一条命令让你这辈子彻底解决“LF will be replaced by CRLF“(建议收藏)
为什么会出这个问题?
我敢拿生命保证, 你肯定在用 Windows, 这是 Windows 专属 bug
(换成 MacOS 也能彻底解决这个问题)
为什么我同事也都是 Windows 却没问题?
是因为你某次不经意的操作把 git 中的 safecrlf 配置改成了 true
- 可能是某个软件"好心"帮你改的
- 可能是你之前看到某篇文章说
safecrl=true是最佳实践, 然后你就改了
而 Git 的默认配置就是 false, 文章开头那个命令就让你改回去而已
如果你想了解到底为什么, 请坐好, 要发车了
什么是 LF & CRLF
世界上有两种操作系统
- Windows
- Unix = MacOS + Linux
这两种系统在表示空格这种不可见字符时方式是一样的, 但表示到这该换行啦的方式却不一样
- Windows 用
CRLF标识 - Unix 用
LF标识
问题此时就出现了, 怎么保证代码/文本在任何系统上都能正常显示/运行呢?
Git 给出了解决方案: 只用 LF.
如果是 Windows 系统
- 在从仓库拉取代码时(其实是把代码 checkout/switch 到某分支时)自动把 LF 转换成 CRLF
- 在 add 时自动把 CRLF 转换成 LF
这种行为是由那个配置项控制的呢?
auto crlf, 看准单词, 是 auto. 文章最上方让你设置是另一个配置项: safe
报的错是什么意思?
fatal: LF will be replaced by CRLF
警告: CRLF 将要转换 LF(但我就是不给转)
What?
commit 时就是应该是把 CRLF 转换成 LF, 很正常呀, 它为什么会出警告
问题出在一个叫做 safe crlf 的配置项上, 看准单词, 是 safe
这个配置项的意思是: 检查 CRLF 与 LF 的转换是否安全.
隐含意思是: 判断一下以后 checkout/switch 时还能把 LF 转换成 CRLF吗?
恭喜你, 中奖了, Git 认为以后转换不回来, 所以不让你 add 本次的变更
Fuck!
这时你需要告诉它, 不要检查, 即 safecrlf = false
这样改行吗?
当然行了, 这是 Git 的默认配置, 你同事在愉快的用 Windows 开发, 就是因为他们没动过默认配置
接下来的演示是全新系统/全新 git 的效果, 你肯定无法复现, 不过可以去你同事电脑上试试
其他文章可能会让你执行下面这个命令, 看一下是否设置了自动转换(看准单词, 是 auto)
git config --global core.autocrlf
执行后什么都不会显示, 类似这样

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)