Git子模块在MSYS2与Cygwin下的文件模式差异问题
问题解答
1. 为什么MSYS2会显示差异?
MSYS2和Cygwin的Git对Windows文件系统的权限模拟逻辑存在差异:
- MSYS2环境下的Git默认开启
core.fileMode配置(值为true),会严格检测文件的Unix权限模式变化,当本地文件权限与仓库记录的权限不一致时,会被识别为修改。 - Cygwin环境下的Git可能默认关闭了权限检测(
core.fileMode=false),或者其权限映射机制忽略了这类细微的权限差异,因此不会触发修改提示。
2. 此处的"mode"指的是什么?
这里的mode是Git记录的Unix风格文件权限模式,采用八进制表示:
100755:表示该文件为可执行文件,权限规则是所有者可读/写/执行(7),组和其他用户可读/执行(5)。100644:表示该文件为普通非可执行文件,权限规则是所有者可读/写(6),组和其他用户只读(4)。
3. 子模块权限差异的解决方法
子模块拥有独立的Git配置,主仓库的core.fileMode设置不会自动同步到子模块,需单独配置:
- 递归为所有子模块关闭权限检测:
git submodule foreach --recursive git config core.fileMode false - 执行子模块重置命令后,权限差异将不再被Git识别:
git submodule foreach --recursive git reset --hard
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

