执行git rm报错时如何禁用或修改Git的sparsity rules?
解决git rm时报稀疏检出规则相关错误的方案
问题原因
报错是两个因素共同导致的:
- 仓库开启了稀疏检出(sparse checkout)模式,你要删除的
local.conf不在当前的稀疏检出规则匹配范围内,git默认不允许操作规则外的索引条目 - 你之前给该文件设置了
skip-worktree标记,git会忽略对该文件的写入类操作
操作步骤
第一步:先取消文件的skip-worktree标记
执行命令,注意路径要和你之前设置时的路径匹配(如果你当前在仓库根目录,路径填etc/local.conf;如果已经在etc目录下,直接填local.conf即可):
git update-index --no-skip-worktree etc/local.conf
第二步:按你的需求调整稀疏检出规则
你可以根据自己的使用场景三选一:
- 仅临时允许操作当前文件,不改动其他稀疏规则
如果你用的是Git 2.25及以上版本,直接执行以下命令把该文件加入稀疏检出允许列表即可:
如果你用的是更早版本的Git,手动编辑仓库下的git sparse-checkout add etc/local.conf.git/info/sparse-checkout文件,新增一行etc/local.conf,保存后执行git read-tree -mu HEAD让规则生效。 - 完全关闭稀疏检出功能,恢复所有文件的正常操作权限
直接执行关闭命令即可:git sparse-checkout disable - 仅关闭提示不解决操作限制(不推荐)
如果你只是不想看到这条报错提示,不需要实际操作该文件,可以执行hint里的命令关闭提示:git config advice.updateSparsePath false
调整完规则后你就可以正常执行git rm local.conf操作了。如果后续你还需要给其他文件设置忽略修改的标记,再重新执行git update-index --skip-worktree 对应文件路径即可。
内容的提问来源于stack exchange,提问作者Eugen Konkov
相关产品推荐
相关产品推荐

