我有一个本地Git回购,我想把它推到一个新的远程回购(全新的回购设置在Beanstalk上,如果这很重要的话)。 我的本地回购有一些分支和标签,我想保留我的所有历史。

看起来我基本上只需要做一个git推送,但这只上传主分支。

我如何推动所有东西,以便在遥控器上获得本地回购的完整副本?


当前回答

我最喜欢的(也是最简单的)方法

git clone --mirror  OLD_GIT_URL
cd  NEW_CREATED_FOLDER
git remote add NEW-REMOTE NEW_GIT_URL
git push  NEW-REMOTE --mirror 

其他回答

以下是我解决[远程拒绝]时,我将本地Git回购到新的远程,包括所有分支和标签

Git克隆——镜像old-repo cd < name-repo.git > Git远程添加新的new-repo Git push new——mirror

我发现上面的答案还有一些不清楚的地方,会误导用户。首先,git push new_origin——all和git push new_origin——mirror不能复制所有的origin分支,它只能复制你本地已经存在的分支到你的new_origin。

下面是我测试过的两种有用的方法:

1、副本由克隆裸回购。Git clone——bare origin_url,然后进入文件夹,然后Git push new_origin_url——mirror。通过这种方式,你也可以使用git clone——mirror origin_url, both——bareand——mirror将下载一个裸回购,不包括工作区。请参考这个

2、如果你有一个使用git克隆的git repo,这意味着你有裸repo和git工作区,你可以使用git远程添加new_origin new_origin_url,然后git push new_origin +refs/remotes/origin/\*:refs/heads/\*,然后git push new_origin——tags

通过这种方式,你会得到一个额外的头部分支,这是没有意义的。

在像我这样的情况下,你获得了一个回购,现在将远程源切换到一个不同的回购,一个新的空的…

你在里面有repo和所有分支,但你仍然需要为git push -all命令签出这些分支。

你应该在推之前这样做:

for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done

紧随其后的是

git push --all

我最喜欢的(也是最简单的)方法

git clone --mirror  OLD_GIT_URL
cd  NEW_CREATED_FOLDER
git remote add NEW-REMOTE NEW_GIT_URL
git push  NEW-REMOTE --mirror 

要推送分支和标签(但不包括遥控器):

git push origin 'refs/tags/*' 'refs/heads/*'

这相当于结合了git push的——tags和——all选项,而git似乎不允许这样做。