Git 结束符不匹配导致提交时差异对比失效,表现为整个文件删除和新增
今天换了电脑开发,发现在进行 git commit
之后,只要文件有修改,即使是一模一样的内容,都是先删除,然后再新增,无法保存仅修改部分的代码。
正文
通过测试有如下发现:
- 对于原电脑的文件,仅在第一次编辑时,会发生上述情况
- 对于当前电脑的,git 提交时,不会出现上述情况
由此,可以推测出,是新旧电脑在文件的处理上不一致导致的。顺着这个思路,开始解决这个问题。
通过 google,其原因是由于 End of Line(eof:行尾结束符)
不同导致的。其中
EOF | 说明 | 备注 |
---|---|---|
CRLF | 回车换行 | |
CR | 回车 | |
LF | 换行 |
- windows 上,行尾结束符为
CRLF
- unix 系统,行尾结束符为
LF
通过对比新旧电脑的文件,其原因确实如此。
解决方法有以下几个:
修改 git 设置
1
2# 检出时自动切换成 CRLF 结束符
git config --global core.autocrlf true在项目目录中通过
.gitattributes
来进行配置如果使用了 prettier,可以用过 prettier 来进行设置
修改 vscode,全局设置
在 vscode 的配置中,搜索
eol
,将其修改为LF
修改 vscode 项目级配置
1
2
3
4
5
6
7
8
9
10
11
12
13# 在项目根目录新建 .editorconfig 文件
# 在里面添加如下配置:
root = true
[*]
indent_style = space
indent_size = 4
# 此处设置行尾结束符为 lf
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = false