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

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

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


当前回答

这里有另一个对同一件事的看法,它更适合我所处的情况。它解决了您有多个远程的问题,想要克隆远程源中的所有分支到远程目标,但不需要事先检查它们。

(我与丹尼尔的解决方案的问题是,它将拒绝从源远程签出跟踪分支,如果我之前已经签出了它,即,它不会在推送之前更新我的本地分支)

git push destination +refs/remotes/source/*:refs/heads/*

注意: 如果你不直接使用CLI,你必须转义星号: Git push destination +refs/remotes/source/\*:refs/heads/\* @mattalxndr

这将把远程源中的所有分支推到目标中的头分支,可能执行非快进推。你仍然需要分别推送标签。

其他回答

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

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

你应该在推之前这样做:

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

紧随其后的是

git push --all

git-push的手册值得一读。结合这个网站,我在我的。git/config中写了以下内容:

[remote "origin"]
    url = …
    fetch = …
    push = :
    push = refs/tags/*

push =:表示“推送任何‘匹配的’分支(即已经存在于远程存储库并且有本地对应的分支)”,而push = refs/tags/*表示“推送所有标签”。

所以现在我只需要运行git push来推送所有匹配的分支和所有标签。

是的,这不是OP想要的(所有要推送的分支必须在远程端已经存在),但是对于那些在谷歌搜索“如何同时推送分支和标签”时发现这个问题的人来说可能是有帮助的。

我正处于从一个版本控制服务切换到另一个版本控制服务的过程中,需要克隆所有存储库,包括所有分支、标签和历史记录。

为了实现以上目标,我做了下面的事情:

手动签出所有分支到本地存储库(脚本签出所有如下所示), Git push origin '*:*'

.sh脚本用于检出所有分支到本地存储库:

for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   git branch --track ${branch#remotes/origin/} $branch
done

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

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

每次我谷歌如何做到这一点,我最终都会读到同样的帖子,但它并没有让我到达我需要的地方,所以希望这对我未来的自己和其他人也有帮助。

我开始了一个新的本地项目,我想把它推到我的回购(比特桶)。以下是我所做的:

导航到本地项目根目录 初始化:git init 使用:git Add添加所有文件。 git commit -m“初始提交” 去我的回购(BitBucket) 创建新的存储库:new_project 回到我的本地项目 add origin git@bitbucket.org:AndrewFox/new_project.git 使用:git Push origin master -f来提交

-f标志用于强制执行,否则它将识别出两个回购是不同的并失败。