首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Git将分支从一个遥控器推送到另一个?

Git将分支从一个遥控器推送到另一个?
EN

Stack Overflow用户
提问于 2011-10-19 17:06:04
回答 6查看 48.4K关注 0票数 145

我设置了以下遥控器:

代码语言:javascript
复制
$ git remote 
korg
rorg

以及以下分支:

代码语言:javascript
复制
$ git branch -a
* (no branch)
  remotes/korg/gingerbread
  remotes/korg/gingerbread-release
  remotes/korg/honeycomb
  remotes/korg/honeycomb-mr1-release
  remotes/korg/master
  remotes/m/android-2.3.3_r1 -> refs/tags/android-2.3.3_r1a
  remotes/m/gingerbread -> korg/gingerbread

现在,我希望将所有远程分支从korg rorg 推送到 remote。我该怎么做呢?

优选地,如果这是可以避免的,则不需要首先为每一个建立本地分支。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-10-19 17:33:16

制作一些临时存储库的快速测试表明,您可以构造一个可以做到这一点的refspec:

代码语言:javascript
复制
$ git push rorg origin/one:refs/heads/one
Counting objects: 5, done.
Writing objects: 100% (3/3), 240 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /tmp/rorg
 * [new branch]      origin/one -> one

So origin/BRANCHNAME:refs/heads/BRANCHNAME

签入我的rorg remote:

代码语言:javascript
复制
pat@host /tmp/rorg (BARE:master)
$ git graph --all
* 5750bca (HEAD, master) c
| * 13fd55a (one) b
|/
* 822e0de a
票数 56
EN

Stack Overflow用户

发布于 2014-01-15 17:28:13

我找到了这个:

代码语言:javascript
复制
git push rorg 'refs/remotes/korg/*:refs/heads/*'

它将我所有的远程分支从korg推送到rorg (即使没有分支的本地副本)。请参见下面的输出:

代码语言:javascript
复制
Counting objects: 293, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (67/67), done.
Writing objects: 100% (176/176), 48.32 KiB, done.
Total 176 (delta 105), reused 168 (delta 97)
remote: Resolving deltas:  11% (12/105)
To <<MY_REPOSITORY_URL>>
 * [new branch]      korg/gingerbread-> gingerbread
 * [new branch]      korg/gingerbread-release -> gingerbread-release
 * [new branch]      korg/honeycomb-> honeycomb
 * [new branch]      korg/HEAD -> HEAD
 * [new branch]      korg/honeycomb-mr1-release-> honeycomb-mr1-release
 * [new branch]      korg/master -> master

然后,您可以对tags refs执行相同的推送:

代码语言:javascript
复制
git push rorg 'refs/tags/*:refs/tags/*'
票数 234
EN

Stack Overflow用户

发布于 2013-04-19 09:10:57

为了补充patthoyt's answer,这里有一个简短的shell脚本,它将所有分支从一个远程推送到另一个远程:

代码语言:javascript
复制
SRC_REMOTE=korg
DST_REMOTE=rorg
for a in $(git branch --list --remote "$SRC_REMOTE/*" | grep -v --regexp='->')
  do git push "$DST_REMOTE" "$a:refs/heads/${a//$SRC_REMOTE\/}"
done

总而言之,对于源远程上的每个远程分支(不包括“指针”分支,如HEAD),将该ref推送到目标远程。( ${a//$SRC_REMOTE\/}位将源远程名称从分支名称中剥离,即origin/master变为master。)

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7818927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档