一、换行符问题
由于不同操作系统的换行符有所不同,比如在Mac操作系统的换行符叫做LF,而windows系统的叫做CRLF(具体差别如下)。因此git在多方进行版本控制时,经常会出现因换行符不同而产生的令人头疼的问题。
表示 | 描述 | 保存到文件中的值 | 操作系统 |
CR | 回车 | \r | Mac OS |
LF | 换行 | \n | Linux、Unix、Mac OS X |
CRLF | 回车换行 | \r\n | Windows |
二、解决方法建议:
(1)在不同操作系统下设置相应的git全局配置,设置autocrlf和safecrlf参数。
windows下:
git config --global core.autocrlf true
(提交时转换为LF,检出时转换为CRLF)
git config --global core.safecrlf true
(拒绝提交包含混合换行符的文件)
linux/macOS下:
git config --global core.autocrlf input
(提交时转换为LF,检出时不转换)
git config --global core.safecrlf true
(拒绝提交包含混合换行符的文件)
这里需要说明的一点是,不管任何平台均将safecrlf参数设置为true,以保持本地换行符正常的好习惯。比如上面Windows平台上将core.autocrlf设置为true,如果工作区的文件中含有LF,当添加到暂存区的时候Git就会拒绝,因为core.safecrlf在true的情况下,Git认为工作区应该都是CRLF才对啊,所以我们需要将所有的LF转换为CRLF才能通过,可以使用dos2unix去转换;如果使用JetBrains系列的IDE则更简单,可通过“选择整个项目”--> File -- File Properties --Line separator -- 选择CRLF,即可全部进行转换。
(3)此外,再向项目添加.gitattributes文件,以防有些git客户端并未设置自动转换。
# Set the default behavior, in case people don't have core.autocrlf set. * text=auto # Explicitly declare text files you want to always be normalized and converted # to native line endings on checkout. # *.key -text # *.crt -text # *.pem -text # *.go text # *.sol text # *.abi -text # *.bin -text