git 默认追踪文件权限变更,macos 上易因编辑器等操作触发“mode change”脏状态;执行 git config --global core.filemode false 可全局禁用该行为,使 git 仅关注内容而非权限位。
git 默认会把文件权限变更(比如可执行位 x 的增删)当作修改记录下来,这在 macos 上尤其容易触发——因为 finder、文本编辑器或某些脚本操作可能无意中改掉文件权限,导致 git status 显示一堆“mode change”脏状态,干扰真实代码变更。
关闭 Git 对文件权限变更的追踪
只需一条命令,让 Git 忽略所有文件的权限位变化:
-
全局生效(推荐):运行
git config --global core.filemode false -
仅对当前仓库生效:进入项目目录后运行
git config core.filemode false
执行后,Git 就不再关注 chmod 引起的权限变动,git status 不再显示类似 modified: script.sh (mode change) 的提示。
为什么这个设置对 macOS 特别有用
macOS 文件系统(APFS/HFS+)默认支持 Unix 权限,但很多开发场景下并不依赖精确的可执行位(比如纯 Python/JS 项目),而编辑器(如 VS Code)、压缩解压、挂载网络盘等操作又常悄悄改权限。关掉 core.filemode 后,既能保持仓库干净,又不影响真正需要权限的场景(如 shell 脚本)——你仍可通过 git update-index --chmod=+x filename 显式标记可执行文件。
验证是否生效
运行以下命令查看当前配置:
-
git config --global core.filemode→ 返回false表示已关闭 -
git ls-files --stage | head -n 3→ 输出中第二列(权限字段)应稳定为100644或100755,不会因 chmod 频繁跳变
补充说明
这个设置只影响 Git 的“感知”,不改变实际文件权限。它和 .gitignore 无关,也不影响内容跟踪——它纯粹是告诉 Git:“别管 mode,只盯内容”。如果你的项目确实依赖严格权限(例如部署脚本必须带 +x),建议用 git add --chmod=+x 显式提交一次权限,之后再关闭 filemode,这样既明确又清爽。











