如何在没有unshallow的情况下解压克隆?

时间:2016-02-19 16:02:52

标签: git

我正在尝试将历史记录缩减为大型存储库。我做了一个浅层克隆

git clone --depth --no-single-branch 1000 url

然后我用这个脚本检查了所有分支

#!/bin/bash
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   git branch --track ${branch#remotes/origin/} $branch
done

之后,我改变了原点

git remote add new-origin new-url
git remote rm origin
git remote mv new-origin origin

然后我推动了新的存储库。我的问题是系统不允许将新的存储库推送到浅层克隆。如果我使用以下命令返回我的旧存储库unshallow:

git fetch --unshallow
然后整个回购再次同步。你知道如何在没有unshallow的情况下解开我的克隆吗?

由于

1 个答案:

答案 0 :(得分:4)

所以这就是你想要做的。继续克隆整个仓库,或fetch --unshallow。现在,假设您想要的提交的SHA作为新仓库的根提交是abc123。执行以下操作:

git checkout --orphan temp abc123
git commit -C abc123   #creates a root commit with the contents and commit message of abc123
git replace abc123 temp  #"tricks" git into using the root commit instead of `abc123`
git filter-branch -- --all  #rewrites the whole repo
git checkout master
git branch -D temp

然后你可以推送到你的新远程仓库。