You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Git同步文件时自动修改文件权限?

解决Git拉取后文件权限变更的问题

Git默认只跟踪文件的可执行权限位(用户级的x位),其余权限(组/其他用户的r/w/x)不会被仓库记录。拉取文件时,Git会根据本地系统的umask值生成默认权限,这就是你遇到权限变更的核心原因。你之前尝试的core.sharedRepository是针对多人共享本地仓库的权限配置,和远程推送拉取的场景无关,因此无效。

以下是几种解决方法,根据你的需求选择:

方法1:确保Git跟踪可执行位(基础配置)

这个配置能让Git识别并保留文件的可执行状态,拉取后文件会保持可执行属性:

# 全局生效(所有仓库)
git config --global core.fileMode true

# 仅当前仓库生效
git config core.fileMode true

方法2:调整本地umask统一权限

如果希望拉取后的文件直接获得rwxrwxrwx(可执行)或rw-rw-rw-(普通)权限,可以修改本地的umask值:

  • 临时生效(仅当前终端会话):
umask 000
  • 永久生效(添加到shell配置文件):
    编辑~/.bashrc或~/.profile,加入:
umask 000

保存后执行source ~/.bashrc生效。这样拉取时,普通文件会默认是rw-rw-rw-,可执行文件会是rwxrwxrwx。

方法3:用.gitattributes批量自定义权限

如果仓库里有大量不同权限要求的文件,可以通过.gitattributes配合Git过滤器自动设置权限:

  1. 在仓库根目录创建.gitattributes文件,添加对应文件的规则:
# 给所有.sh文件设置777权限
*.sh filter=set-sh-perm
# 给所有.py文件设置755权限
*.py filter=set-py-perm
# 给所有.txt文件设置666权限
*.txt filter=set-txt-perm
  1. 配置Git过滤器:
# 配置.sh文件的权限过滤器
git config filter.set-sh-perm.smudge 'chmod 777 %f'
git config filter.set-sh-perm.clean 'chmod 777 %f'

# 配置.py文件的权限过滤器
git config filter.set-py-perm.smudge 'chmod 755 %f'
git config filter.set-py-perm.clean 'chmod 755 %f'

# 配置.txt文件的权限过滤器
git config filter.set-txt-perm.smudge 'chmod 666 %f'
git config filter.set-txt-perm.clean 'chmod 666 %f'

配置完成后,每次拉取(smudge阶段)和提交(clean阶段)时,对应文件会自动应用设定的权限。

内容的提问来源于stack exchange,提问作者Soroush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:10:24