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

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

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


当前回答

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

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

其他回答

根据@Daniel的回答,我做了:

for remote in \`git branch | grep -v master\`
do 
    git push -u origin $remote
done

我发现上面的答案还有一些不清楚的地方,会误导用户。首先,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

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

如果目的地是空的,这是我发现的最简洁的方法。切换到一个空文件夹,然后:

# 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等。

镜像存储库

创建存储库的裸克隆。

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