将 git 个完整克隆转换为浅克隆

Convert git full clone into a shallow clone

如何将存储库的深克隆变成浅拷贝就地?

我正在使用 git 来管理我们软件的单独安装,以跟踪安装运行时对代码的任何更改(未跟踪和脏文件),但存储库非常大 (800MB),因此随便放几百份不是个好主意。

因此,如果可以将这些存储库变成仅包含当前部署的提交而不是完整树的浅表副本,那就太好了。 在升级期间,repo 将被转换回深克隆,检查特定提交,然后将其变成新提交的浅克隆。

git fetch --depth=1 --update-shallow 不会缩小 .git 目录大小,我猜它会获取任何新提交,但不会删除旧数据。添加 --shallow-exclude=HEAD^2 会使 git 抛出一个错误,虽然不完全确定它应该如何工作,但我猜测它在删除 HEAD^2 时会产生冲突的要求,但想要检查 HEAD,这取决于深度克隆中的 HEAD^2。

error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly

好的,这就是最终的解决方案:

ORIGIN_URL=$(git remote get-url origin)
COMMIT=$(git rev-parse HEAD)

rm -rf .git
git init .
git remote add origin $ORIGIN_URL
git fetch origin $COMMIT --depth 1
git reset --mixed $COMMIT