2010-12-02 95 views
3

我有一个分支的github库(称之为repo-O并调用我的fork repo-F),它包含大约8个分支。已经做出几个(100s)的提交来从其他贡献者以及多个repo-O分支进行repo-O。现在我想将这些更改引入我的分叉回购(repo-F)。我不能使用fork队列,因为大约有3000个提交选择,我宁愿从命令行执行此操作。在Github上更新分叉存储库的多个分支

所以..我克隆了我的回购,添加了repo-O作为远程(上游)并提取了更改,然后合并原点/上游...然后推回到repo-F。

这似乎已申请更改到主分支,而不是任何其他分支....

我怎么能重复上述过程,使“所有”分支更新一次?

感谢

回答

4

你要完成什么是“关于回购-O每个远程分支,创建同一个分支指向回购-O的分支,如果我没有它或拉从本地分支信息无论是在repo-o的同一分支上,并最终将所有这些分支推向我的回购-f“。

假设你的遥控器都被真名叫repo-orepo-f,我喜欢的东西玩,在bash

for repo_o_branch in \ 
    $(git branch -a|grep repo-o|perl -nle's,^\s*repo\-o/,,;print $_'; 
do 
    (                \ 
     (git checkout $repo_o_branch        \ 
     && git pull --rebase repo-o $repo_o_branch)    \ 
     || (git checkout -b $repo_o_branch repo-o/$repo_o_branch) \ 
    ) && git push repo-f $repo_o_branch; 
done 

对于所有的“回购Ø分支”(由git branch -a为“回购O/BRANCHNAME所示”,没有‘空间和‘回购-O /’’的一部分),

  • 尝试检出的分支git pull --rebase repo-o branchname里面,
  • 或者如果git checkout失败(因为您没有该分支):签出以repo-o的分支名称命名的新分支,并将其指向repo-o的branchname。
  • 如果上述两项中的任何一项成功,则将新创建或更新的分支名称推送到您的repo-f。

季节的味道;对repo-f新的git克隆最佳试图用添加到它的远程repo-o,以防万一出问题;)

+0

非常感谢,这是有道理的。 ..我希望有一种方法可以让git自动合并所有分支,但是这个脚本看起来好像有用。谢谢 – mrwooster 2010-12-02 10:16:04

1

AWK版本的一些合并treaks

sync_all_branch() { 
    git fetch upstream 
    for upstream_branch in $(git branch -a |awk 'BEGIN {FS="/"} $2=="upstream" {print $3}') ; 
    do 
     if git checkout $upstream_branch 
     then 
      echo merge $upstream_branch 
      git merge -s recursive -Xours upstream/$upstream_branch 
     else 
      echo create $upstream_branch 
      git checkout -b $upstream_branch upstream/$upstream_branch 
     fi 
    done 
    git checkout master 
    git push --all 
}