首页/开发/Git 与协作速查/core.fileMode 与权限位
进阶与大仓实践69 条

core.fileMode 与权限位

Git 记录可执行位:core.fileMode 控制是否跟踪文件模式变化;Windows 或跨文件系统挂载时该值常被自动置为 false,避免假性模式差异。

Git 与协作速查开发更新于 2026-10-13

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)为准。

易错点

  • 关闭 fileMode 后本地 chmod 不进提交:脚本部署后可能无法执行,需在索引层面显式设置
  • 忽略探测差异:同一仓库在不同机器取值不同,跨平台协作先约定哪一侧负责提交模式
  • 在 Windows 上反复 chmod:文件系统不支持时操作无效,只会制造困惑
  • 忽略部署验证:服务器或容器里跑脚本前先验证执行位,报错后再回改成本更高
  • 全部文件都标记可执行:无差别的 +x 会被其他系统视为风险,只对脚本与程序文件设置

数据来源与参考

  • Git 官方文档:git-config(core.fileMode)
  • Git 官方文档:git-update-index(--chmod)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌