2010-12-02 24 views
3

私は、約8つのブランチを含むforked githubリポジトリ(repo-Oと呼んで、自分のfork repo-Fを呼び出します)を持っています。 repo-Oには、他の寄稿者やrepo-Oの複数のブランチから数回(100回)コミットされています。私は今、私のフォークされたレポ(repo-F)にこれらの変更を取り入れたいと思います。私はフォークキューを使用することはできません。約3000件のコミットがあり、コマンドラインからこれをやります。Githubで分岐したリポジトリの複数のブランチを更新する

私はrepo-Oをリモート(上流)として追加し、変更を取得した後、origin/upstreamをマージしてからrepo-Fに戻します。

これはmasterブランチにではなく、他のブランチに変更を適用しているように見えます....

枝が更新されている「すべて」のように、私は上記のプロセスを繰り返すことができますどのように?

おかげ

答えて

4

何を達成したいことは、私はそれを持っているかからローカルブランチの情報を引っ張っていない場合はレポ-Oのブランチを指す同じブランチを作成し、レポ-O上の各リモートブランチのため」でありますrepo-oの同じブランチにあるものは何でも、最後はこれらのブランチをすべて私のrepo-fにプッシュします。

あなたのリモコンが本当にrepo-orepo-fを命名していると仮定すると、私はbashで、何かのようにプレーしたい:レポ-O/branchname」としてgit branch -aで示される(すべての "レポOブランチ" については

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 

を」なし 『スペースと『レポ-O /』それの』一部)、

  • 、その中git pull --rebase repo-o branchnameをやっブランチをチェックしてみてください
  • またはgit checkoutが失敗した場合(そのブランチを持っていない場合)は、次のようにします。repo-oのブランチ名の後に名前が付けられた新しいブランチをチェックアウトし、repo-oの分岐名をポイントします。
  • 上記のいずれかが成功した場合は、新しく作成または更新されたブランチ名をrepo-fにプッシュします。

味わい深い季節;最高の物事がうまくいかないだけの場合には、それに追加のリモートrepo-orepo-fの新しく作成されたgitのクローンに試してみました。いくつかと)

+0

おかげで多くのことをマージし、これは理にかなっています。私はgitにすべてのブランチを自動マージさせる方法があると思っていましたが、このスクリプトはそのトリックを行うように見えます。ありがとう – mrwooster

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 
} 
関連する問題