core.fileMode 是什么
Git 索引记录文件的可执行位:core.fileMode 控制 Git 是否跟踪文件模式的变化。在 Windows 或跨文件系统挂载的场景里,平台无法可靠读写可执行位,clone 时该值常被自动探测为 false,避免误报「模式差异」。跨平台团队的正确姿势:Linux/macOS 一侧显式提交脚本可执行位,Windows 一侧保持 false 减少噪音。
基本信息
| 查看 | git config core.fileMode |
|---|---|
| 行为 | false 时忽略模式变化(可执行位),true 时纳入比较 |
| 显式设置 | git update-index --chmod=+x <文件> 把可执行位写入索引 |
| 探测 | clone / init 时按文件系统能力自动设置 |
| 查看索引 | git ls-files -s <文件>:100755 可执行,100644 普通 |
| 分工建议 | Linux/macOS 侧管理可执行位,Windows 侧保持 false |
典型使用场景
- Windows 开发机:保持 fileMode=false,避免无效 chmod 带来的差异噪音
- 跨平台仓库:脚本执行位在 Linux/macOS 侧提交,部署后可直接执行
- 排错:脚本部署后 Permission denied 时先看索引中的模式
- 新仓库演练:clone 后检查探测值是否符合预期
- 共享挂载:WSL 与虚拟共享目录里语义不同,必要时手工设置
- CI 校验:流水线检查关键脚本的索引模式是否为 100755
常用示例
常用示例
git config core.fileMode # 查看当前取值(Windows 常见 false)
git update-index --chmod=+x scripts/deploy.sh # 在索引中标记可执行
git ls-files -s scripts/deploy.sh # 复核:100755 表示可执行位已记录
git update-index --chmod=-x scripts/deploy.sh # 需要取消时反向操作取值与含义
| 取值/模式 | 含义 | 场景 |
|---|---|---|
| fileMode=true | 跟踪模式变化 | Linux/macOS 常规配置 |
| fileMode=false | 忽略模式变化 | Windows 与能力受限的挂载 |
| 索引 100755 | 可执行 | 部署脚本的期望值 |
| 索引 100644 | 普通文件 | 脚本缺执行位时报 Permission denied |
Linux/macOS 团队负责提交脚本可执行位;Windows 开发者保持 fileMode=false 可减少无意义的模式变更。
该值按文件系统能力自动探测且是仓库级配置:同一仓库在不同机器上可以不同,这是本地环境差异,不是仓库异常。
共享挂载目录里 chmod 语义可能不可靠,关键文件的模式以索引视角(ls-files -s)为准。