映射网络驱动器与服务器上同一Git仓库git status结果不同的原因
git status结果不一致的原因 文件系统特性差异:Ubuntu使用ext4这类类Unix文件系统,对文件名大小写严格区分(比如
Readme.md和readme.md会被识别为两个不同文件),而Windows默认的NTFS文件系统不区分大小写。Git在不同系统下的大小写敏感配置可能不同,导致识别的文件状态出现偏差。另外,两类系统对文件权限、隐藏属性的处理逻辑完全不同,Git会把这些差异判定为文件变更。Git配置的系统差异:Git的配置分系统、全局、仓库三个层级,Ubuntu和Windows上的Git默认配置大概率不一样。比如换行符处理的
core.autocrlf参数,Windows端通常设为true(自动把LF转成CRLF),Ubuntu端则常用input或false;还有core.filemode参数,Ubuntu下默认会跟踪文件权限的变化,而Windows通过网络驱动器访问时,无法正确识别Unix文件权限,导致Git在Windows端忽略权限变更,两端的git status结果自然不同。网络驱动器的缓存延迟:Windows映射的网络驱动器会有本地缓存机制,读取的文件状态可能不是Ubuntu端的实时状态,和Git仓库的实际情况不同步,这也会导致
git status结果出现差异。Git索引的独立性:Git的索引文件(
.git/index)是本地维护的,Ubuntu和Windows端的Git各自拥有独立的索引。哪怕是同一个仓库,一端操作后另一端的索引不会自动更新,执行git status时用的还是旧索引数据,结果也就不一致了。
内容的提问来源于stack exchange,提问作者Theju112

