Git操作中crlf和lf冲突问题

多人参与项目开发的时候,经常会遇到代码格式化不一致,在提交的时候出现很多冲突的情况。其中换行符冲突就是一种,在不同的系统平台上是不一样的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是 0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF) 作为换行符。所以会出现使用mac的开发者修改的代码中是lf换行,windows用户使用的crlf换行符,总是互相影响。还有一个原因是,git默认配置了autocrlf为true,也就是说默认所有代码都会被提交成了crlf,但是如果不同开发者自己配置的autocrlf配置不一致(比如,input或者false),就会出现总是互相覆盖的情况。以下是解决换行符冲突的解决方案:

1、编辑器统一

a. 修改git全局配置,禁止git自动将lf转换成crlf, 命令:

git config --global core.autocrlf false复制代码

b. 修改编辑器的用户配置,例如vscode

"files.eol": "\n", // 文件换行使用lf方式复制代码

2、git方式统一

git提交的时候,文件中的换行符必须是LF,如果不是不能提交。

# 提交时转换为LF,检出时不转换
git config --global core.autocrlf input

# 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true复制代码

3、EditorConfig

主流编辑器都支持EditorConfig,配置end_of_line后,你编辑的代码会自动转化为对应的换行符。当然你需要将autocrlf关闭,防止再次被转换成其他格式,

# 取值包括 crlf,lf,cr
end_of_line = lf

# 提交检出均不转换
git config --global core.autocrlf false复制代码

4、prettier

prettier是目前非常流行的代码格式化工具,提供了endOfLine来支持格式化换行符。

{
  // ...
  "endOfLine" : "lf"
  // ...
}复制代码
# 提交检出均不转换
git config --global core.autocrlf false复制代码

因为我们现有的项目都已经支持prettier,自然就使用了【husky+lint-staged+prettier】的方式,来支持所有代码格式化成 lf 换行符。


转载于:https://juejin.im/post/5cc574e0518825750351a13c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值