我有一个本地Git回购,我想把它推到一个新的远程回购(全新的回购设置在Beanstalk上,如果这很重要的话)。 我的本地回购有一些分支和标签,我想保留我的所有历史。
看起来我基本上只需要做一个git推送,但这只上传主分支。
我如何推动所有东西,以便在遥控器上获得本地回购的完整副本?
我有一个本地Git回购,我想把它推到一个新的远程回购(全新的回购设置在Beanstalk上,如果这很重要的话)。 我的本地回购有一些分支和标签,我想保留我的所有历史。
看起来我基本上只需要做一个git推送,但这只上传主分支。
我如何推动所有东西,以便在遥控器上获得本地回购的完整副本?
当前回答
要推送所有分支,可以使用以下任意一种(将REMOTE替换为远程的名称,例如“origin”):
git push REMOTE '*:*'
git push REMOTE --all
推送所有标签:
git push REMOTE --tags
最后,我认为你可以在一个命令中完成这一切:
git push REMOTE --mirror
然而,除此之外——镜子,也会推动你的遥控器,所以这可能不是你想要的。
其他回答
git-push的手册值得一读。结合这个网站,我在我的。git/config中写了以下内容:
[remote "origin"]
url = …
fetch = …
push = :
push = refs/tags/*
push =:表示“推送任何‘匹配的’分支(即已经存在于远程存储库并且有本地对应的分支)”,而push = refs/tags/*表示“推送所有标签”。
所以现在我只需要运行git push来推送所有匹配的分支和所有标签。
是的,这不是OP想要的(所有要推送的分支必须在远程端已经存在),但是对于那些在谷歌搜索“如何同时推送分支和标签”时发现这个问题的人来说可能是有帮助的。
我最喜欢的(也是最简单的)方法
git clone --mirror OLD_GIT_URL
cd NEW_CREATED_FOLDER
git remote add NEW-REMOTE NEW_GIT_URL
git push NEW-REMOTE --mirror
要推送所有分支,可以使用以下任意一种(将REMOTE替换为远程的名称,例如“origin”):
git push REMOTE '*:*'
git push REMOTE --all
推送所有标签:
git push REMOTE --tags
最后,我认为你可以在一个命令中完成这一切:
git push REMOTE --mirror
然而,除此之外——镜子,也会推动你的遥控器,所以这可能不是你想要的。
根据@Daniel的回答,我做了:
for remote in \`git branch | grep -v master\`
do
git push -u origin $remote
done
实现目标的主要方法是使用——all和——tags标记。忽略其中任何一个都不能实现你想要的东西。不幸的是,它们不能一起使用(不知道为什么),所以它们必须一个接一个地运行。
git push --all
git push --tags
另一个相关的选项是——prune选项,它删除远程上本地不存在的任何分支/标签。
或者,考虑——mirror选项,因为它基本上等同于——all——tags——prune。
git push --mirror