我有一个本地Git回购,我想把它推到一个新的远程回购(全新的回购设置在Beanstalk上,如果这很重要的话)。 我的本地回购有一些分支和标签,我想保留我的所有历史。
看起来我基本上只需要做一个git推送,但这只上传主分支。
我如何推动所有东西,以便在遥控器上获得本地回购的完整副本?
我有一个本地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似乎不允许这样做。