2009-09-05 12 views
32

Githubでホストされているかなり小さなオープンソースプロジェクトに貢献しています。他の人が私の仕事を利用できるように、私はGithubに自分のフォークを作りました。 Githubの用語の選択にもかかわらず、私は主要なプロジェクトから完全に分岐したくありません。しかし、私はすべての仕事がメインリポジトリに受け入れられるとは思っていません。しかし、そのうちのいくつかは、すでにメインリポジトリに統合されており、これを続行することを期待しています。私が実行している問題は、2つのツリーをコードを簡単に共有できる状態にするのが最善の方法です。私が持っているか遭遇しますオープンソースプロジェクトのgitリポジトリのベストプラクティス

いくつかの状況は次のとおりです。

  • 私は後でメインリポジトリに を受け入れているコードをコミットします。私がこのリポジトリから将来 を引き出すと、 私のコミットは私の リポジトリに複製されます。
  • 私は決して受け入れられないコードをメインリポジトリにコミットします。私はこのリポジトリから将来的に引き出すと、2つのツリーが分岐して固定するのが難しいです。
  • 別の人が来て、自分の仕事を自分のリポジトリに基づいています。したがって、私が押したコミットを、例えばgit rebaseを使って変更しないようにしてください。
  • マスターリポジトリにコードを送信したいと考えています。理想的には、私の変更は、マスターリポジトリに直接的かつきれいに適用できるパッチ(理想的にはgit形式のパッチを使用することが理想的です)に容易に変換できるはずです。

    • よくあるの頭をオフに基づいて、私の変更を保持するためにGitのリベースを実行します。私の知る限りこれを処理するための2つ、または多分三つの方法、特にうまく機能しているのどれもがある言うことができるよう

    上流のリポジトリこのようにして、私は重複したコミットを排除できますが、しばしば履歴を書き換えなければならないので、自分の仕事を鉱山から派生させたい人には問題が生じます。

  • 上流のリポジトリの変更を頻繁にマージします。これは私の最終的には正常に動作しますが、上流のリポジトリに自分のコードを提出することは容易ではないようです。
  • git cherry-pickのこれらの組み合わせをいくつか組み合わせて使用​​してください。

この状況で他の人は何をしましたか?私の状況は、さまざまなカーネル寄稿者とLinusのメインリポジトリとの関係に似ていることが分かっています。うまくいけば、これを処理する良い方法があります。私はかなりgitに新しいので、すべてのそれを習得していないニュアンス。最後に、特にGithubのおかげで、私の用語が完全に一貫していたり​​、正しいとは限りません。私を修正しても構いません。

+0

リベースされた変更を強制的にプッシュしても、他の人も簡単にリベースして更新することができます。それは歴史がどこにでも絶えず書き直されている別のワークショップです。その上に、あなたは力のプッシュがすべてを拭くことができるので少し慎重にする必要があります:) – rubenvb

答えて

17

私は似たような状況から学んだいくつかのヒント:

  • は、上流の作者の仕事のためのリモート追跡ブランチを持っています。
  • この追跡ブランチからマスターブランチへの変更を頻繁に行います。
  • 作業中のトピックごとに新しいブランチを作成します。これらのブランチは、通常はローカルのみでなければなりません。アップストリームからマスターに変更が加えられたら、これらの変更を反映するようにトピックブランチをリベースします。
  • トピックの作業が終わったら、マスターにマージしてください。この方法では、あなたの仕事を派生している人々は、あなたの地元の支部支部でリベースが行われたので、あまり書き直された歴史は見られません。
  • 変更の送信:基本的には、マスターブランチは一連のコミットになりますが、そのうちのいくつかは上流と同じで残りはあなたのものです。後者は、必要に応じてパッチとして送信することができます。

もちろん、支店名とリモコンの選択はあなたのものです。私はこれらがシナリオの網羅的なものであるかどうかはわかりませんが、彼らは私のハードルの大部分をカバーしています。

+0

私はこの質問をして以来、私はGitの経験を多く得て、これでほぼ解決しました最高の答えとして。ローカルコミットのみが重要なので、開発中に変更を維持する。間違いなく良い先端。ありがとう。 – orangejulius

+0

複数のコンピュータでトピックブランチを扱ったことがありますか?もしそうなら、あなたは何をしましたか? –

+1

いいえ、私はコンピュータ間でトピックブランチに取り組んでいませんが、難しい "コンピュータ間の"部分ではありません。それは "人々を越えた"ものです。トピックブランチをサーバーに簡単にプッシュすることができます。 – sykora

関連する問題