我有一个本地Git回购,我想把它推到一个新的远程回购(全新的回购设置在Beanstalk上,如果这很重要的话)。 我的本地回购有一些分支和标签,我想保留我的所有历史。
看起来我基本上只需要做一个git推送,但这只上传主分支。
我如何推动所有东西,以便在遥控器上获得本地回购的完整副本?
我有一个本地Git回购,我想把它推到一个新的远程回购(全新的回购设置在Beanstalk上,如果这很重要的话)。 我的本地回购有一些分支和标签,我想保留我的所有历史。
看起来我基本上只需要做一个git推送,但这只上传主分支。
我如何推动所有东西,以便在遥控器上获得本地回购的完整副本?
当前回答
镜像存储库
创建存储库的裸克隆。
git clone --bare https://github.com/exampleuser/old-repository.git
镜像推送到新的存储库。
cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
删除在步骤1中创建的临时本地存储库。
cd ..
rm -rf old-repository.git
镜像包含Git大文件存储对象的存储库
创建存储库的裸克隆。将示例用户名替换为拥有存储库的个人或组织的名称,并将示例存储库名称替换为希望复制的存储库的名称。
git clone --bare https://github.com/exampleuser/old-repository.git
导航到刚才克隆的存储库。
cd old-repository.git
导入存储库的Git大文件存储对象。
git lfs fetch --all
镜像推送到新的存储库。
git push --mirror https://github.com/exampleuser/new-repository.git
将存储库的Git大文件存储对象推到镜像。
git lfs push --all https://github.com/exampleuser/new-repository.git
删除在步骤1中创建的临时本地存储库。
cd ..
rm -rf old-repository.git
以上说明来自Github帮助:https://help.github.com/articles/duplicating-a-repository/
其他回答
对我来说,有效的方法是。
git push origin --all
我发现上面的答案还有一些不清楚的地方,会误导用户。首先,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
通过这种方式,你会得到一个额外的头部分支,这是没有意义的。
下面的命令将推送所有的分支(包括那些你从未签出但在你的git repo中出现的分支,你可以通过git branch -a看到它们)
Git push origin '*:*'
注意:当您正在迁移版本控制时,此命令非常方便 (我的服务。e从Gitlab迁移到GitHub)
如果目的地是空的,这是我发现的最简洁的方法。切换到一个空文件夹,然后:
# Note the period for cwd >>>>>>>>>>>>>>>>>>>>>>>> v
git clone --bare https://your-source-repo/repo.git .
git push --mirror https://your-destination-repo/repo.git
用https://..。对于文件:///your/repo等。
要推送所有分支,可以使用以下任意一种(将REMOTE替换为远程的名称,例如“origin”):
git push REMOTE '*:*'
git push REMOTE --all
推送所有标签:
git push REMOTE --tags
最后,我认为你可以在一个命令中完成这一切:
git push REMOTE --mirror
然而,除此之外——镜子,也会推动你的遥控器,所以这可能不是你想要的。