2012-06-12 14 views
7

私はプロジェクトに取り組んでおり、中央のgit repoを持っています。このプロジェクトは、いくつかのフォークのベースラインとなるスケルトンです。Git Tracking Upstream

フォークのローカル作業リポジトリをプロジェクトの中心を起点として追跡し、スケルトンのマスターを上流の別のブランチとして追跡することは可能ですか?

私は私のワークフローのようなものにしたいと思います:

はフォーク2からスケルトン>>フォークスケルトン>>スケルトン迫る変更を作成します>>スケルトン

からフォーク1迫る変更は、より良いプロセスがあります私が説明したことをするには?

答えて

7

「レポフォーク」ページ(私はあなたがGitHubには言及しなかったが、それはまだ関連して知っている)

  • originがいることを、あなたのフォークのリモートアドレスでのGitHubの「Step 3: Configure remotes」を読みますあなたの地元のクローンは
  • upstreamにプッシュ/プルからできるオリジナルのレポSkeletonのリモートアドレス(あなたがgit remote add upstream https://..../Skeleton.gitでそれを追加することができます)

だから上流分岐ではないです。

しかし、あなたはgit branchで、上流のレポから上流分岐用のリモート追跡ブランチマスターを持つことになりますローカルブランチを定義することができます。

git branch --set-upstream upstream_master upstream/master 

しかし、あなたが特にあなたならば、ローカルブランチを必要としません。あなたはupstream/masterとあなたのマスターを直接比較することができます。の後に、あなたが必要とするものをupstream/masterからピックアップします。

+0

それは、私がこれをやろうとしていた行に沿っているので、この質問を促しました。 'git branch -set-upstream upstream_master upstream/master'コマンドは、' git remote upstream/srv/repos/git/skeleton.git'の直後には動作しません。何故ですか?私は偶然、トラブルシューティングを試みている問題を修正しました。私はマスターワークツリーで 'git fetch upstream 'を実行したいとは思っていませんでしたが、それを使ってトラブルシューティングを行い、上流/マスターにリモートトラッキングブランチを追加することができました。私はリモートブランチ上流/マスターがそれまで私のレポにいないためだと思います。リモートアドの直後に –

+0

?リモートトラッキングブランチ 'upstream/master'がフェッチされてローカルリポジトリに格納されるようにするには、まず' git fetch upstream 'が必要です。 'git fetch'はあなたのローカルファイルを変更しません。 – VonC

1

それは言い換えれば

initially: 
1 - 2 - 3 <- upstream 
     \- 4 <- fork 

upstream changes: 
1 - 2 - 3 - 5 - 6 <- upstream 
     \- 4 <- fork 

after rebase: 
1 - 2 - 3 - 5 - 6 <- upstream 
       \- 4 <- fork 

を次のようにこの状況を変えていく

$ git rebase upstream 

を使用して、変更するたびにあなたの説明によると、あなたはスケルトンにフォークをリベースする必要があり、あなたのフォークます最新バージョンのスケルトンからフォークされているかのように見えます。

このアプローチの欠点は、フォークの履歴を変更することです。これを望まない場合、アップストリームをフォークにマージするだけです(チェリーピックアップは必要ありません)。

+0

ファイルがフォークの後でリベースの前に削除された場合、gitがそれらのファイルに変更を適用するとどうなりますか? –

+0

ファイルを変更しなかった場合、ファイルはリベース中に削除されます。それらを変更した場合は、手動で解決する必要がある競合が発生します。 – Sjlver

関連する問題