CRLF和LF在跨平台工作时候带来的烦恼以及解决方法
在使用git提交代码时候,有时候会遇到一个问题,就是自己明明只修改了其中几行,提交上去以后发现整个文件都被修改了,在设置了格式风格以后还会有提交不上去的情况,这个时候经常让人摸不到头脑,其实就是CRLF和LF在作怪
CRLF LF CR 都是什么意思:
-
CRLF: 是carriagereturnlinefeed的缩写。中文意思是回车换行。
-
LF: 是line feed的缩写,中文意思是换行。
-
CR: 是carriagereturn的缩写。中文意思是回车。
简单的换行回车为什么会引出这么多的问题呢,关键在于操作系统之间的分歧:
早期的mac系统使用CR当做换行,现在也已经统一成了LF
Unix(包含现在大量使用的linux)系统使用LF
windows系统使用LFCR当做换行(自作聪明的兼容性??)
也正是因为不同系统的分歧,在多人协作共同开发的时候,可能导致提交代码时候产生问题。
解决方法:
Android Studio内部可以设置不同模式,具体位置在setting-->搜索code style见下图:
设置格式其中有四个选项System-Dependent LF CR CRLF,默认是System-Dependent,也就是根据你是什么系统选择什么类型,如果想要自定义的话可以在这里设置,以后创建的新代码也默认用设置的方式
而如果想单独修改某个文件的类型,也可以在右下角进行修改,见下图:
单独修改某个文件跨平台合作时候的解决方式:
当我们使用git库提交代码的时候,有的人可能使用mac,有的人使用linux,有的人使用windows,不同的开发环境如果都是按照自己系统的方式任意修改换行类型,难免会让代码库整体混乱或者产生许多没有必要的代码更新
那么解决该问题的方式有:core.autocrlf命令
git为了防止以上问题扰乱跨平台合作开发,使用命令可以转化LF和CRLF
具体体现为:
- git config --global core.autocrlf true
Git可以在你push时自动地把行结束符CRLF转换成LF,而在pull代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当签出代码时,LF会被转换成CRLF
- git config --global core.autocrlf input
Linux或Mac系统使用LF作为行结束符;当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf设置成input来告诉 Git 在push时把CRLF转换成LF,pull时不转换
- git config --global core.autocrlf false
在本地和代码库中都保留CRLF,无论pull还是push都不变,代码库什么样,本地还是什么样子
当然在多人跨平台工作时候,最好还是约定使用LF,还是CRLF,然后不同系统进行对应的设置,这样是工作规范,也有利于提高工作效率,希望以上可以帮助大家。