如何快速修改Git仓库索引中所有文件的uid/gid以避免长时间索引更新
解决方案
核心原因
Git索引(存储于.git/index)默认会记录每个工作区文件的uid、gid元数据,执行git status等操作时会比对实际文件的元数据与索引存储值,不一致就会触发全量文件校验和索引更新,这是800GB仓库单次更新耗时20分钟以上的根本原因。
方案1:盲改索引内所有文件的归属信息(无需扫描工作区)
Git 2.37及以上版本原生支持直接批量更新索引内的uid/gid记录,全程不会校验工作区文件内容,秒级完成操作:
git update-index --chown=uidB:gidB --all
直接执行以上命令即可将索引中所有条目对应的归属信息批量修改为uidB:gidB,修改完成后后续执行git操作不会再触发全量索引更新。
方案2:关闭uid/gid校验,完全避免触发索引更新
如果你不需要修改索引本身,可以直接调整Git的元数据校验规则,忽略uid、gid差异:
git config core.checkStat minimal
该配置会让Git仅比对文件大小、修改时间两个核心元数据,完全忽略uid、gid、inode号的差异。由于你是基于快照克隆的工作区,所有文件的大小、修改时间与原仓库完全一致,配置后执行git status等操作不会触发任何索引更新,无需等待即可正常使用。
注意:该配置不会影响Git对正常文件修改的检测,只要文件内容发生变更,修改时间或大小会同步变化,Git依然可以正常识别变更。如果需要所有仓库默认生效,可将命令替换为
git config --global core.checkStat minimal全局配置。
内容的提问来源于stack exchange,提问作者Sarvi Shanmugham
相关产品推荐
相关产品推荐

