プロジェクトを git(hub) でフォークし、フォークでいくつかのパッチを維持しながら、リリース (タグ) とリリース ブランチでそれらのパッチを再作成したいと考えています。
初期リポジトリ構造
アップストリームの構造は非常に単純です。
origin/trunk A---B---D---F---H---...
\
origin/0.9 C---E---G---...
|
(tag 0.9)
問題
アップストリーム プロジェクトはコミットで依存関係のバージョンを増やしましたがA、Dそれらは主に利便性のためであり、しばらくの間互換性リリースを維持できると確信しています。
機能ブランチを作成し、コミット用のパッチを作成するために使用trunk_compatし、必要に応じてパッチを作成しました。これを分岐させましたgit revert --no-commitADorigin/trunk
mine/trunk_compat A*---D*
/
origin/trunk A---B---D---F---H-...
\
origin/0.9 C---E---G---...
|
(tag 0.9)
origin/trunkそのため、これを公開するかどうかに応じてリベースまたはマージすることで、パッチを追跡および維持することが非常に簡単になりました。
私たちの目標は、両方のブランチ (trunkと) のこれらのパッチを維持し、 (からタグ付けされているため0.9) のリリース バージョンを再作成することです。0.9E
そして、私はこれを適切に行う方法に途方に暮れています。
- それまでのすべてのコミットだけでなく、パッチも含む
0.9_compatブランチが必要なので、それを継続的インテグレーション サーバーに入れ、それが機能するかどうかを確認できます。GA*D* - withとapplied
0.9_compatの状態のタグが必要です。EA*D*- さらに複雑にするために、コミットは実際にはブランチへの
Eバックポートであるため、ここにもパッチを適用する必要がありますD0.9D* - アップストリーム プロジェクトは SVN にあり、これはフォークしている git-svn ミラーであるため、これは適切なマージまたはリベースではありません。
- さらに複雑にするために、コミットは実際にはブランチへの
- 将来、アップストリームはブランチ
0.10などになり、それらのブランチにもパッチを維持したいと考えています。
私はチェリーピッキングをたくさんするか、手動でパッチを適用するだけでこれを行うことができますが(私は思う)、それは正しくないと感じており、gitを最大限に活用していないと思います.