参考:
在 Git 中正确设置 CRLF、LF 换行符转换
现象
拉取后再Android Studio 中显示正常,但是 run 之后,所有的文件在git 中显示 modify。
查看具体变更发现是所有的内容先显示删除 - ,在显示添加 +
Beyond Compare 文本比较显示完全一致,十六进制比较发现问题。
原因
我使用 windows 而我的朋友使用的是 macOS 。
windows中默认换行用的CRLF(回车+换行),而linux环境下默认用的LF(换行),于是所有文件都被标注被更改。
打开文件时,显示 LF 。当我 run 工程之后所有的文件都变成了 CELF
解决
在 C:\Users\用户\.gitconfig 文件中,添加以下内容:
[core]
autocrlf = true
filemode = false
safecrlf = true
core.autocrlf
git config --global core.autocrlf [true | input | false] # 全局设置
git config --local core.autocrlf [true | input | false] # 针对本项目设置
true
提交时转换为LF,检出时转换为CRLFinput
提交时转换为LF,检出时不转换false
提交与检出的代码都保持文件原有的换行符不变(不转换)
CRLF 与 LF 混合的文本文件不受此配置控制。
Git 安装后默认为 false
core.safecrlf
由于没有一个绝对有效的算法来判断一个文件是否为文本,所以 Git 提供了一项禁止 / 警告不可逆转换的配置来防止错误的标准化与转换。它主要是影响到多种换行符混合的文件,我们可以手动将其转换为同一种换行符:
git config --global core.safecrlf [true | false | warn]
true
禁止提交混合换行符的文本文件(git add 的时候会被拦截,提示异常)warn
提交混合换行符的文本文件的时候发出警告,但是不会阻止 git add 操作false
不禁止提交混合换行符的文本文件(默认配置)