git换行行为差异简述;.editorconfig换行行为简述
概述
1个项目开发过程中可能有多个人参与,而大家所使用的开发环境不一定相同,有的是mac
有的是windows
;在没有很好的规范git
配置情况下,可能会出现换行符不一致的问题;
目前mac
下的换行符是LF(\n)
;老mac
上可能是CR(\r)
;
windows
下是CRLF(\r\n)
这就会导致mac
上新建的文件(所有内容换行都是LF
),在win
上修改了一行代码后,在推送到远端代码仓库后会显示整个文件都修改了;但其实只改了1行代码;其原因就是换行符在搞事情;
解决方式
我这边历史项目比较混杂,所以直接把core.autocrlf
设置为了false
;不然历史代码一堆commit
都变我了LOL
git配置中的core.autocrlf属性
Git
的core.autocrlf
配置项用于控制Git
如何处理换行符。以下是几种常见的配置:
1-true
:提交时将CRLF
转换为LF
,检出时将LF
转换回CRLF
2-input
:提交时将CRLF
转换为LF
,检出时不进行转换
3-false
:提交和检出时都不进行转换(默认值
)
#全局配置demo
git config --global core.autocrlf input
#验证配置
git config --global --get core.autocrlf
#查看所有配置;以及配置来源
git config --show-origin --list
同时建议开启crlf
和lf
混用时的提醒
#一般core.safecrlf默认值是warn;如果不是warn可以修改为warn
git config --global core.safecrlf warn
core.safecrlf其他参数
1-true
: 拒绝提交包含混合换行符的文件 (会提示 Fatal:xxx)
2-false
: 允许提交包含混合换行符的文件
3-warn
: 提交包含混合换行符的文件时给出警告 (默认值)
.editorconfig换行行为简述
除了git
在提交代码的时候会对换行进行转换,项目中的这个配置也会对换行进行转换;
不过这个配置需要配合编辑器的插件来生效;
在应用了这个配置之后,即时只修改了1
行代码,也会将整个文件的换行符重置为LF
插件
.editorconfig
和git
的区别;
git
是在checkout
和push
的时候进行转换
.editorconfig
则是在save
的时候就进行转换了
可以通过git命令查看修改的行数
#结果中第一列是增加的行数量,第二列是删除的行数量
git diff --numstat