Gitのブランチ戦略
Gitブランチ戦略
Gitを、だね。使うわけだよ。
でも、どんな使い方がるあるの?って探した時に、よく似た名前で微妙に違う説明が書いてあって、混乱してしまう。
で、以下にざっと目についたブランチ戦略をリストアップしてみた。
名前 | 特徴 |
---|---|
Git Flow | 一番メジャー Gitコマンドのプラグインとして作られていて、専用のサブコマンドが用意されている SourceTree でGUI操作が可能。 運用するブランチが少し多い。 ブランチandマージ方式。 |
GitHub Flow | 手動で実施する。 運用するブランチは少ない(といいつつtopicブランチの下は多くなる)。 開発者ごとにリポジトリを保有する。 フォークandプルリク方式。 |
Gitlab Flow | 手動で実施する。 運用するブランチは少し多い。 リリース対象のブランチを用意する。 全員でひとつのリポジトリを参照する。 ブランチandマージ方式。 |
Git Flow
おそらくGitを使ったワークフローを探すと一番最初に行き当たる手法。
運用管理するブランチが少し多いが、Gitのプラグインなどが提供されており、手順の複雑な部分は隠蔽されている。SourceTreeにGUIのインターフェースもある。
例えば、featureブランチは必ずmasterから分岐し、作業が終わればmasterへマージするなどのルールをプラグインが保証してくれる。
機能追加の最中に緊急でバグ対応を迫られた場合などの手順が用意されている。
ブランチ名称 | 機能 |
---|---|
master | すべての基本 開発者は基本的にここにはコミットしない いつ何時でも、常にリリースできるような状態を保つ。 最後まで生き残る。 |
develop | 作業ブランチ 機能追加はここから分岐し、いったんここへ合流する。 最後まで生き残る。 |
feature | 機能追加 developより分岐し、developへ戻る。 作業が済んだらブランチそのものは削除する。 |
release | リリース準備 全ての機能追加作業が済んだら(つまりdevelopから分岐したfeatureが全てマージされて合流したら)、developから分岐する。 リリースが無事に完了したら、developとmasterの両方にマージすることで、masterとdevelopの同期を取る。 作業が終わったらこのブランチも削除。 |
hotfix | 緊急のバグフィックス これだけはmasterから分岐する。 不具合対応が済んだら、これもdevelopとmasterの両方にマージすることで、それぞれのブランチの同期を取る。 作業が終わったらこのブランチも削除。 |
SourceTreeを使った場合の手順とか
参考URL
- git-flowについて (コマンドラインでの使い方概略)
- Git-flowって何? Qiita
- SourceTree上でGit Flowを動かしてみる Qiita
- git-flowを使った日々の開発フローのふりかえり Qiita
- git flow × Pull Request を使ってモダンな開発してみた Qiita
- git-flowを使ってGitHubにプルリクエストを送ってみる手順 Qiita
GitHub Flow
とくにプラグインやGUIはない。手動で実施する。
フォーク先からプルリクを送り、それを受け入れることでレビューが完了とする。
masterブランチは、つねにリリースできるようにする。
(…ことを人間が気を付ける)
ブランチ名称 | 機能 |
---|---|
master | すべての基本 つねにリリースできるようにする。 |
topic | トピックブランチ 機能追加・不具合対応に使う。 topic/task_name1 topic/task_name2 などのように、複数のブランチを持つ。 |
参考URL
GitLab Flow
とくにプラグインやGUIはない。手動で実施する。
関係者全員は同じリポジトリを見る。フォークはしない。
リリース用のブランチを用意する。
GitHubではなく、Gitlab が元となる。
Gitlabでは、ブランチでの作業が終わったらマージリクエストを発行する。
(Githubでも同様の機能はある模様)
ブランチ名称 | 機能 |
---|---|
master | すべての基本 |
topic | 機能追加・不具合対応に使う。 |
production | リリースブランチ |