1.对于换行符的理解
不同的操作系统,对于换行符的表示是不一样的,也就是说在编辑一个文件时,当敲下一个回车键的时候,对于不同的操作系统保存到文件中的换行符是不一样的。如下所示:
CR: 表示回车 \r (CarriageReturn的缩写)
LF: 表示换行 \n (LineFeed的缩写)
CRLF: 表示回车换行 \r\n
敲入回车键,在不同操作系统保存到文件中的值:
windows: 使用的是 CRLF ===> 即 \r\n , 文件中保存的是 \r\n
Linux\Unix: 使用的是 LF ===> 即 \n , 文件中保存的是 \n
Mac OS: 使用的是 CR ===> 即 \r ,文件中保存的是 \r
Mac OS X系统: 使用的是 LF ===> 即 \n ,文件中保存的是 \n (Mac OS X 已经改成和Linux\Unix一样,使用 LF)
那么就会存在问题:
既然在不同的操作系统中,对于换行符会使用不同的表示形式。如果一个团队在开发一个共同的项目时,有人使用的是Windows系统,有人使用的是Mac,有人使用的是Linux,则当使用git协同开发软件时,就会出现换行符不统一的问题。
2.三种配置及适用情况
(1)Git 可以在你提交时自动地把回车和换行(CRLF)转换成换行(LF),而在检出(checkout)代码时把换行(LF)转换成回车和换行(CRLF)。 可以把 core.autocrlf设置为true 来打开此项功能。 如果是在 Windows 系统上,把它设置成 true,这样在检出代码时,换行(LF)会被转换成回车和换行(CRLF):
(在Windows平台上,git默认的core.autocrlf是true,可以通过git config --list命令查看)
//提交时转换为LF,检出(checkout)时转换为CRLF
git config --global core.autocrlf true
(2)如果使用以换行(LF)作为结束符的Linux或Mac,不需要Git在检出文件时进行自动的转换。然而当一个以回车和换行(CRLF)作为行结束符的文件不小心被引入时,肯定想让Git修正。所以,可以把 core.autocrlf 设置成 input 来告诉 Git 在提交时把回车和换行(CRLF)转换成换行(LF),检出(checkout)时不转换:
//提交时转换为LF,检出时不转换
git config --global core.autocrlf input
(3)如果使用的是 Windows ,且正在开发仅运行在 Windows 上的项目,可以把 core.autocrlf设置为false 取消此功能,即提交和检出均不转换:
//提交检出均不转换
git config --global core.autocrlf false
一般在项目中,为了避免项目同时出现 CRLF 和 LF ,还可以开启git 的 safecrlf 检查。开启方法如下中的第一条命令:
// 拒绝提交包含混合换行符的文件 (一般设置为true)
git config --global core.safecrlf true
// 允许提交包含混合换行符的文件
git config --global core.safecrlf false
// 提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
3.换行符不统一的解决方法
解决方法一:
windows本地和Mac或Linux保持一致用(LF) \n
步骤1:修改git的自动换行转换为false,防止从git拉代码下来在检出时自动转成(CRLF) \r\n
//提交检出均不转换
git config --global core.autocrlf false
步骤2:设置idea的Settings中的Code Style 中的Line separator为 \n
解决方法二:
Windows用户设置:core.autocrlf=true,
Mac/Linux用户设置:core.autocrlf=input,
这样提交到远程仓库的都统一是LF,然后拉取下来的又是各自系统平台的。