プロジェクトを 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-commit
A
D
origin/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.9
E
そして、私はこれを適切に行う方法に途方に暮れています。
- それまでのすべてのコミットだけでなく、パッチも含む
0.9_compat
ブランチが必要なので、それを継続的インテグレーション サーバーに入れ、それが機能するかどうかを確認できます。G
A*
D*
- withとapplied
0.9_compat
の状態のタグが必要です。E
A*
D*
- さらに複雑にするために、コミットは実際にはブランチへの
E
バックポートであるため、ここにもパッチを適用する必要がありますD
0.9
D*
- アップストリーム プロジェクトは SVN にあり、これはフォークしている git-svn ミラーであるため、これは適切なマージまたはリベースではありません。
- さらに複雑にするために、コミットは実際にはブランチへの
- 将来、アップストリームはブランチ
0.10
などになり、それらのブランチにもパッチを維持したいと考えています。
私はチェリーピッキングをたくさんするか、手動でパッチを適用するだけでこれを行うことができますが(私は思う)、それは正しくないと感じており、gitを最大限に活用していないと思います.