首页 > 解决方案 > 将git完整克隆转换为浅克隆

问题描述

如何将存储库的深层克隆原地转换为浅层副本?

我正在使用 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

标签: gitshallow-clone

解决方案


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

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

推荐阅读