问题1:IDEA GoLand 问题 Contents have differences only in line separators
原因:使用mac导入的windows项目文件,系统默认打开文件替换之前行分隔符
解决:需要改成统一分隔符。全选所有文件,点击File->File Properties->Line Separator 更换成上个版本的分隔符即可。
问题2:显示Contents are identical
替换分隔符后, 工作区还是提示文件全是改动过,显示Contents are identical,其实内容都是一样,经过解决后,推测是ide git 缓存的问题。
- 设置了: git config core.fileMode false
参考了 Commit Changes displaying “Contents are identical” when pushing changes
并没有生效,可能它仅解决文件权限变化了 有这种提示的问题。对我来说是无效。 - 后来:尝试File->Invalidate Cache 重启Ide 也无效
- 最后:干脆自己把所有文件提交尝试后,发现并没有提交全部,只是提交我实际改动了文件内容的文件,因为本次提交不是本意提交,所以自己撤销本地提交,撤销后修复了该问题;或者不撤销也可以,问题也能修复。
每个人的情况可能不同,这里记录尝试方法,供大家参考,也给自己备录,再次遇到这个问题时,重新commit后回退就好了。
背景
首先在不同操作系统中,换行符并不统一,Linux 系统中使用 0x0A(LF), windows 系统中使用 0x0D0A(CRLF), 而 MAC OS 系统起初使用0x0D(CR) 后来和 Linux 系统保持一致。而 git 默认采用 Linux 的换行符(当然这一点并不奇怪)。
git 为了解决不同平台换行符不一致的问题,在 windows 操作系统中默认在检出代码时将 LF 转换为 CRLF,而在提交的时候再转换为 LF,但是看似完美的解决方案在中文环境中却失效了。
根本解决方案
设置 git 全局参数
git 中有三个参数于换行符有关:
eol: 设置工作目录中文件的换行符,有三个值 lf, crlf 和 native(默认,同操作系统)
autocrlf:
true 表示检出是转换CRLF, 提交时转换为 LF
input 表示检出是不转换,提交时转换为 LF
false 表示不做转换
safecrlf:
true 表示不允许提交时包含不同换行符
warn 则只在有不同换行符时警告
false 则允许提价时有不同换行符存在
git config --global core.eol lf
git config --global core.autocrlf false
git config --global core.safecrlf true