win10与mac,CRLF与LF的冲突

4,082 阅读2分钟

起因

日常开发过程中,前端同学有的用macos,有的用windows,这两个平台在处理文件换行符的时候,默认会用不同的处理方式。

在windows上,如果你不做一些设置的话,默认将文件换行符设置为CRLF,然而在macos等类unix系统上,则是将文件换行符默认设置为LF这个选项,这样,别人提交的代码是LF格式的换行(macos),你提交的代码是CRLF格式的(windows),就会造成“冲突”啦。

这种冲突的表现就是我明明一行代码都没改,但是整个文件上半部分是红色,下半部分是绿色?其实是因为git认为你的所有换行符改掉了,从而识别出来的。

解决方法

我使用的解决办法就是默认都采用LF格式的代码,无论是本地的代码还是提交到远程的代码。

(1)查看文本换行的办法

使用vscode开发的同学可以看vscode的右下角有个地方显示了换行的标准。

从这个地方就可以看到文件换行的方法了。 点击这个LF,可以看到一个切换的地方,可以把本文件的换行标准给改掉了。

(2)如何改变默认换行标准

虽然上面这个方法可以改变一个文件的换行字符,但是windows上默认创建个文件是CRLF的,总不能创建一个再转吧,其实vscode是有这个设置的:

打开设置选项,添加一行配置:

"files.eol": "\n",

这样就可以保证新创建的文件使用的是LF标准作为换行符。

(3)确保git不会帮你转换格式

其实git也知道这两个平台的差别,因此有一套关于这个的配置,就是core.autoclrf这个选项,这个选项有如下配置:

  • true 提交时转换为LF,检出时转换为CRLF
  • false 提交检出均不转换
  • input 提交时转换为LF,检出时不转换

我们只需要将这个属性设置成下面这样就可以了

git config --global core.autocrlf false

总结

共同开发项目的时候遇到一些git上面的冲突其实还是挺让人恼火的,我就因为这个被队友把写的代码都弄没了。知道这个坑以后,下次开发就可以提前配置好环境(一般是windows环境做配置),流畅开发项目。