多台默认文件权限不同的电脑提交Git时,如何处理文件权限变更问题?
解决多设备提交代码时Git误报文件权限变更的问题
这个问题我简直太熟悉了——不同电脑的默认文件权限配置(比如umask设置不一样),导致Git把文件权限的细微变化当成了内容修改,每次commit前diff全是权限变更的垃圾信息,根本没法正常看代码改动。别慌,这有几个实用的解决办法:
一、全局/仓库级忽略权限变更(最推荐)
这是最省心的方案,直接让Git停止跟踪文件的执行权限变化:
- 仅当前仓库生效:在仓库根目录执行
git config core.fileMode false - 所有本地仓库生效:如果你的所有项目都有这个问题,直接全局配置
git config --global core.fileMode false
放心,这个设置只会让Git忽略文件的可执行权限变更,不会影响文件内容的跟踪。除非你确实需要管理脚本类文件的可执行权限,否则这个设置完全不会有副作用。
二、单独跟踪特定文件的权限(按需使用)
如果某些文件(比如shell脚本)确实需要Git跟踪其可执行权限,那可以在全局忽略权限的基础上,单独处理这些文件:
- 先按上面的方法设置好
core.fileMode false - 对需要跟踪权限的文件执行:
git update-index --chmod=+x 你的脚本文件名.sh - 提交这个变更后,Git就会单独记住该文件的可执行权限,其他文件依然忽略权限变化。
三、清理已有的权限变更记录
如果你的工作区已经堆满了权限变更的修改,可以先撤销这些无用的变更:
git checkout HEAD -- .
执行完这个命令后,工作区就会回到上一次提交的状态,再设置好权限忽略,就不会再出现乱码一样的diff了。
内容的提问来源于stack exchange,提问作者rwx
相关产品推荐
相关产品推荐

