git中的crlf和lf问题

370 阅读1分钟

背景

我的同事使用的是mac,我使用的是windows,项目中eslint配置了换行符的规则为 lf。在我的vscode中文件是crlf的,编辑器就会报错

原因分析

git的配置项 core.autocrlf 用于控制换行符问题。这个选项决定了在检出(checkout)和提交(commit)文件时如何处理行结束符。可以设置为三个值:

  • true:在windows系统上使用这个值时,会在检出时将LF转换为CRLF,并在提交文件时将CRLF转换为LF。也就是说,git中存储的永远是LF,只是工作区是CRLF
  • input:在提交时将CRLF转换为LF,检出时不进行任何转换
  • false:git不会自动转换换行符

通过git config --global core.autocrlf可以看到我配置的是 true,所以工作区中的文件是 crlf 的。

问题解决

只需要把我工作区中的文件设置为 LF 的就可以了。可以这样做:

git config --global core.autocrlf input
git rm --cached -r .
git reset --hard

第一个命令配置git,使git在检出文件时不进行任何转换。 第二个命令,用于从暂存区中删除所有文件 第三个命令,使用当前分支的最新commit覆盖工作区和暂存区。 这样做的话可以避免产生新的git修改记录。