Git Branching Strategy for Customizing and Hosting OSS Repositories
OSS をフォークして自社向けにカスタマイズし、さらに独自ホスティングまで行うケースがあり、定期的にオリジナルを追従しつつ、それぞれ差分を明確にしていくため、現在運用してる手法をまとめてます。
ブランチ
- main - メインブランチは追加する内容とデプロイ実行環境を提供します。
- original/application-name - ここにオリジナルの内容をリモート (upstream) から取り込みます。
- customize/application-name - ここは original/application-name から checkout および rebase しつつ、常に original/application-name の前のコミットとしてカスタマイズ内容が存在するようにします。
application-name の箇所はオリジナルのリポジトリ名です。
記録用のブランチ
- original/version/application-name
- customize/version/application-name
version はソフトウエアバージョンでも日付でも好きに選べばいいでしょう。
カスタマイズを行い、リリースした時点のオリジナルとカスタマイズブランチをチェックアウトして保持しておきます。GitHub 等においては、original/version/application-name から customize/version/application-name との差分をマージ禁止 Pull Request として作成保持しておくと、diff を振り返えりやすいです。
操作方法
1. upstream(オリジナルリポジトリ)の登録
まずはリポジトリに、オリジナルのリポジトリを upstream として登録します。
| |
2. original/application-name ブランチの更新
オリジナルの変更を取り込むためのブランチです。
| |
必要に応じてコンフリクトを解消します。
3. customize/application-name の更新(rebase 運用)
カスタマイズ内容は常に original/application-name の直前に並ぶように rebase します。
| |
rebase によって、カスタムコミットが最新の original の上に積み直されます。 ここのコンフリクトは慎重に解消します。破壊的な仕様変更の可能性もあるため、カスタマイズ作業のためにもメモしておく方が良いでしょう。
4. リリース時の記録ブランチ作成
リリース時点の状態を記録するために、original と customize の両方を version ブランチとして保存します。
original 側の記録
| |
customize 側の記録
| |
5. GitHub で差分を記録する(マージ禁止 PR)
GitHub 上で以下の Pull Request を作成しておくと、「このリリースでどのようなカスタムを加えたか」が一目で分かるようになります。
- base:
original/version/application-name - compare:
customize/version/application-name
PRタイトルの先頭にマージ禁止の明示やDraftにしておくといいでしょう。
メインブランチでのデプロイ作業
カスタマイズ内容を展開する
下記の例は、main ブランチにおいて work ディレクトリにカスタマイズブランチの最新の内容を出力します。
| |
main ブランチの目的
アプリケーションサービスは、クラウドやVPSなどの環境でそのままデプロイできるものが提供しているとは限りません。事前にデプロイ先のVPCを作成したり、WAFなどを被せたいこともあります。そのような追加インフラ管理や作業場所として main ブランチを使う戦略を採用しています。