VOICEVOXのエディタ・エンジン・コア・リソースなどのリポジトリで取られているブランチ戦略を紹介します。 一言でいうと、リリースブランチ付きのGitHub Flowです。
プルリクエストは任意のタイミングでmainブランチから派生して、mainブランチにマージします。 mainにマージする際はsquashマージします。
%%{init: {'theme':'base', 'gitGraph': {'showCommitLabel': false}} }%%
gitGraph
commit
commit
branch PR1
commit
checkout main
merge PR1
commit
branch PR2
commit
commit
checkout main
merge PR2
commit
マイナーバージョンごとにreleaseブランチを作成し、パッチバージョン更新時はそのreleaseブランチにコミットし、タグを打ちます。 バージョン更新後にreleaseブランチをmainにマージします。 releaseブランチをmainにマージする際はsquashせずにマージします。
%%{init: {'theme':'base', 'gitGraph': {'showCommitLabel': false}} }%%
gitGraph
commit
commit
branch release-0.1
commit tag:"0.1.0"
checkout main
merge release-0.1
checkout release-0.1
commit
commit tag:"0.1.1"
checkout main
merge release-0.1
commit
リリースに関してはリリース戦略を参照してください。
リリース済みの機能に問題があった場合は、releaseブランチから派生して、releaseブランチに向けてhotfix用のプルリクエストを作成します。
%%{init: {'theme':'base', 'gitGraph': {'showCommitLabel': false}} }%%
gitGraph
commit
commit
branch release-0.1
commit tag:"0.1.0"
checkout main
merge release-0.1
checkout release-0.1
branch hotfix
commit
checkout release-0.1
merge hotfix tag:"0.1.1"
checkout main
merge release-0.1
commit
releaseブランチからbufferブランチを作成し、mainブランチをbufferブランチにマージしてから、bufferブランチをmainブランチにマージします。 このときの2回のマージは両方ともsquashせずにマージします。
%%{init: {'theme':'base', 'gitGraph': {'showCommitLabel': false}} }%%
gitGraph
commit
commit
branch release-0.1
commit tag:"0.1.0"
checkout main
merge release-0.1
checkout release-0.1
commit tag:"0.1.1"
checkout main
commit
checkout release-0.1
branch buffer-0.1
merge main
checkout main
merge buffer-0.1
commit
過去の議論はこちらにあります。