背景
有不少开发者在拉取代码后,没有对代码进行修改或只改了少数代码,在保存时,发现整个文件都被修改了,如果 IDE 在配置成保存格式化,会立马看到有变更,此时可能并没有修改代码,这是由于 git 自动转换换行符导致的问题。
git配置
不同开发平台,所使用的换行符是不一样的,在window平台下,换行为crlf,unix/linux/MacOS为lf,git为了做兼容,git提供换行符自动转换的功能 默认提交到服务端统一将换行符转成lf,在拉取时将换行符转成各平台所使用的换行符,比如在window下安装的git,在拉取时,会自动将lf转换成crlf,在提交时,又会将crlf转换成lf,但是这种方式,在某些场景下是有问题的,有时提交时,crlf转回lf可能会不工作,尤其是文件中出现中文字符后有换行符时。
配置说明
// 提交时转换为LF,检出时转换为CRLF(一般设置这个)
git config --global core.autocrlf true
// 提交时转换为LF,检出时不转换
git config --global core.autocrlf input
// 提交检出均不转换
git config --global core.autocrlf false
// 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
// 允许提交包含混合换行符的文件
git config --global core.safecrlf false
// 提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
全局解决方案
方式一:
打开本地git配置文件,C:/Users/[用户名]/.gitconfig,修改git配置core,如果没有,直接添加:
[core]
autocrlf = false
safecrlf = true
方式二
git bash命令行也可以修改,最终也是修改.gitconfig配置文件,分别执行:
git config --global core.autocrlf false
git config --global core.safecrlf true
指定仓库解决方案
方式一:
打开仓库项目根目录,选中左上角的查看,将隐藏的项目勾选,此时项目根目录会出现.git文件夹,进入此目录,找到config配置文件,跟全局解决方案一样,修改git配置core,如果没有,直接添加:
[core]
autocrlf = false
safecrlf = true
方式二
进入项目根目录,打开git bash命令行也可以修改,最终也是修改config配置文件,分别执行:
git config --local core.autocrlf false
git config --local core.safecrlf true
项目配置解决方案
在项目根目录创建.gitattributes文件,在其中进行配置,如下:
*.cpp text eol=lf
*.h text eol=lf
*.c text eol=lf
*.hpp text eol=lf
*.cmake text eol=lf
*.sh text eol=lf
*.py text eol=lf
*.js text eol=lf
*.vue text eol=lf
*.tsx text eol=lf
*.ts text eol=lf
编辑器解决方案
以VSCode为例,在编辑器进行配置,注意:编辑器分为用户级与工作区,将其属性设置为lf即可:
注意:编辑器的配置的换行符对于之前的文件是不生效的,可自行新建文件重新处理。