升级到git 2.32后所有本地仓库显示稀疏检出的原因及批量修复方案
问题触发原因
这个问题是Git 2.32版本的稀疏检出逻辑变更导致的:
- 2.32版本之前,Git只会同时满足
core.sparseCheckout配置为true、且存在.git/info/sparse-checkout文件两个条件时,才会判定仓库处于稀疏检出状态 - 2.32版本调整了判定逻辑,只要仓库内存在
.git/info/sparse-checkout文件,不管core.sparseCheckout的默认值,都会标记为稀疏检出状态,哪怕当前100%文件都已检出,也就触发了git-prompt的|SPARSE后缀显示
你之前的本地仓库可能因为各种历史操作(比如早期测试过稀疏检出功能、第三方Git客户端自动生成、自动化脚本遗留等)残留了sparse-checkout文件,brew升级Git到2.32后就批量触发了这个表现。
批量修复方法
方法一:全局配置禁用(推荐,操作最简单)
直接设置Git全局配置默认关闭稀疏检出,所有存量和未来新建的仓库都会生效,不需要逐个修改仓库配置:
git config --global core.sparseCheckout false
方法二:批量修改存量仓库配置
如果你不想修改全局配置,只需要清理现有仓库的异常标识,可以cd到所有本地Git仓库的上级根目录,执行以下命令批量修改:
# 批量关闭所有本地仓库的sparseCheckout配置 find . -type d -name ".git" -execdir git config core.sparseCheckout false \;
如果要彻底根除残留文件,可以同步删除所有仓库的冗余sparse-checkout文件:
# 批量删除所有仓库残留的sparse-checkout文件 find . -type d -name ".git" -exec rm {}/info/sparse-checkout \;
内容的提问来源于stack exchange,提问作者Matt Montag
相关产品推荐
相关产品推荐

