Githubでホストされているかなり小さなオープンソースプロジェクトに貢献しています。他の人が私の仕事を利用できるように、私はGithubに自分のフォークを作りました。 Githubの用語の選択にもかかわらず、私は主要なプロジェクトから完全に分岐したくありません。しかし、私はすべての仕事がメインリポジトリに受け入れられるとは思っていません。しかし、そのうちのいくつかは、すでにメインリポジトリに統合されており、これを続行することを期待しています。私が実行している問題は、2つのツリーをコードを簡単に共有できる状態にするのが最善の方法です。私が持っているか遭遇しますオープンソースプロジェクトのgitリポジトリのベストプラクティス
いくつかの状況は次のとおりです。
- 私は後でメインリポジトリに を受け入れているコードをコミットします。私がこのリポジトリから将来 を引き出すと、 私のコミットは私の リポジトリに複製されます。
- 私は決して受け入れられないコードをメインリポジトリにコミットします。私はこのリポジトリから将来的に引き出すと、2つのツリーが分岐して固定するのが難しいです。
- 別の人が来て、自分の仕事を自分のリポジトリに基づいています。したがって、私が押したコミットを、例えばgit rebaseを使って変更しないようにしてください。
- マスターリポジトリにコードを送信したいと考えています。理想的には、私の変更は、マスターリポジトリに直接的かつきれいに適用できるパッチ(理想的にはgit形式のパッチを使用することが理想的です)に容易に変換できるはずです。
- よくあるの頭をオフに基づいて、私の変更を保持するためにGitのリベースを実行します。私の知る限りこれを処理するための2つ、または多分三つの方法、特にうまく機能しているのどれもがある言うことができるよう
上流のリポジトリこのようにして、私は重複したコミットを排除できますが、しばしば履歴を書き換えなければならないので、自分の仕事を鉱山から派生させたい人には問題が生じます。
- 上流のリポジトリの変更を頻繁にマージします。これは私の最終的には正常に動作しますが、上流のリポジトリに自分のコードを提出することは容易ではないようです。
- git cherry-pickのこれらの組み合わせをいくつか組み合わせて使用してください。
この状況で他の人は何をしましたか?私の状況は、さまざまなカーネル寄稿者とLinusのメインリポジトリとの関係に似ていることが分かっています。うまくいけば、これを処理する良い方法があります。私はかなりgitに新しいので、すべてのそれを習得していないニュアンス。最後に、特にGithubのおかげで、私の用語が完全に一貫していたり、正しいとは限りません。私を修正しても構いません。
リベースされた変更を強制的にプッシュしても、他の人も簡単にリベースして更新することができます。それは歴史がどこにでも絶えず書き直されている別のワークショップです。その上に、あなたは力のプッシュがすべてを拭くことができるので少し慎重にする必要があります:) – rubenvb