CRLF,LF,换行符,用来表示文本换行的方式。
CR(Carriage Return)代表回车,对应\r,
LF(Line Feed)代表换行,对应字符\n。
window系统使用CRLF(\r\n)作为换行符,Unix系统(Linux,MacOS)使用LF。
window系统上有些编辑器还常常偷偷地把换行符改成CRLF。最终导致明明没有修改代码,但却整个文件都不同了。
Git的换行符处理
core.autocrlf
通过core.autocrlf可以更改git处理换行符的方式。
core.autocrlf有三个值:
- 当设置为true时,git提交代码时会自动将CRLF转换为LF,在检出代码时会将LF转换成CRLF。一般在windows上使用该功能。
git config --global core.autocrlf true
- 在Linux或MacOS上时,使用LF作为换行符,检出代码时不需要转换。但是当代码中已有一个CRLF换行符时,在提交时就需要将其转换成LF。因此input的功能是在提交代码时,将CRLF转换成LF;检出代码时不转换。
git config --global core.autocrlf input
- 当设置成false时,表示不做任何转换。因此可以把CRLF提交到版本库中。
git config --global core.autocrlf false
综上,如果是跨平台开发和运行,core.autocrlf应在windows上设置为true,在Linux和MacOS上设置为input;如果仅在windows上开发和运行的项目,可以设置为false。
core.safecrlf
一样有三个值:
# 不允许提交包含混合换行符的文件
git config --global core.safecrlf true
# 允许提交包含混合换行符的文件
git config --global core.safecrlf false
# 提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
core.eol
当core.autocrlf为false时可以设置文本文件的换行符类型。有三个值crlf,lf和native,默认是native,表示平台默认的换行符。
.gitattribute
通过.gitattribute文件配置仓库的git是更好的方式。
常用的配置:
* text=auto eol=lf
*匹配所有文件,text=auto表示由git自己识别是否是文本文件(因为二进制文件,如图片,不需要转换换行符),eol=lf将换行符设置为LF。
使用了.gitattribute则不需要设置core.autocrlf和core.eol。
如果不小心将CRLF换行符提交到仓库,则可以通过以下命令修复,然后重新提交。
git add --renormalize .
VSCode
VSCode中设置文件的换行符类型。
- 打开文件的右下角可以设置
- File -> Preferences -> Settings -> Files:Eol
ESLint
ESLint中也可以增加换行符校验。 unix表示LF,windows表示CRLF。
module.exports = {
// ...
rules: {
// ...
'linebreak-style': ['error', 'unix']
}
}