如何在不取消浅克隆的情况下去除浅克隆?

5

我试图通过一个浅克隆的方式来减少大型仓库的历史记录。

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

然后我向新仓库进行了推送。我的问题是,系统不允许对一个浅克隆的仓库进行推送。如果我返回到我的旧仓库并使用以下命令解除浅克隆:

git fetch --unshallow

那么整个代码库将再次同步。你知道一种不取消浅克隆的情况下如何使我的克隆版本非浅克隆吗?

谢谢


1
你确定你的仓库正在从新仓库获取吗?也许在fetch中明确指定新仓库会有所帮助。 - Kzqai
我的错,我已经纠正了我的问题。 - Killrazor
你是否指的是“从存储库中删除旧历史记录”而不是“unshallow克隆而没有unshallow”这种毫无意义的说法?这可以做到,但所有哈希值都会更改。浅层克隆知道存在历史记录,只是不知道它是什么。您能否更新标题和正文,以不提到“(un)shallow”? - rjmunro
1个回答

5

那么这里是你想要做的事情。请先克隆整个代码库,或者使用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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接