A successful Git branching model
Gitの使い方について良い記事があったのでメモ。
【元ネタ】
見えないチカラ: A successful Git branching model を翻訳しました
構成管理について良い本は、「パターンによるソフトウェア構成管理 (IT Architects’ Archive―ソフトウェア開発の課題)」と「入門Git
」の2冊。
これらの本を読んで理解した立場から書いてみる。
GitやMercurialのような分散バージョン管理では、ブランチをたくさん作るのが普通。
ブランチの目的を意識して、ブランチを管理するのが重要。
上記の記事では、メインブランチ、フィーチャーブランチ、リリースブランチ、ホットフィックスブランチの4種類が紹介されている。
僕の理解では、記事に書かれているメインブランチはtrunk、フィーチャーブランチはトピックブランチ、リリースブランチはまさにリリースブランチ、ホットフィックスブランチはタスクブランチに相当すると思う。
メインブランチは、全てのブランチの本流。
継続的インテグレーションで常時ビルドされていて、安定して最新の機能が常時リリース可能なコードライン。
「パターンによるソフトウェア構成管理 (IT Architects’ Archive―ソフトウェア開発の課題)」ではメインラインモデルと呼ばれている。
この手法の利点は、trunkが全てのブランチの派生元なため、ブランチを新たに作ることが容易になること。
逆に駄目な構成管理は、trunkを次々に乗り換えていくパターン。
どのコードラインを参照してブランチを派生させればいいか、開発者が混乱してしまうから。
フィーチャーブランチは、特定の目的だけのためにハックしたり、バグ修正のパッチを当てたりするためのブランチ。
「入門Git」ではトピックブランチと呼ばれている。
トピックブランチでは、一つのトピックのためにブランチを派生させて、パッチを育てていく感覚。
トピックブランチへtrunkから最新のソースを取り込む時は、pullではなくrebaseが推奨されている。
rebaseなら、パッチを育ててきた履歴が残るから、後から修正理由を追跡しやすくなる。
上記の記事のリリースブランチは、リリース時期が決まりバージョン名が決まったら、派生させるブランチ。
メインライン(trunk)は最新の機能をどんどん拡張していくコードライン、リリースブランチは本番運用を前提としてバグ修正だけを行い、品質を重視するコードラインとして使い分ける。
つまり、機能拡張と本番運用の品質を重視する目的を分けたコードラインを保持することで、裏では機能拡張しながら安定した本番運用を行うことが可能になる。
ホットフィックスブランチは、「パターンによるソフトウェア構成管理 (IT Architects’ Archive―ソフトウェア開発の課題)」ではタスクブランチと呼ばれている。
特定目的のためのブランチだが、トピックブランチとは違って、緊急性を持ったブランチの場合が多いだろう。
よくある例は、Ver1.0をリリース後、Ver2.0に向けて開発中のプロジェクトで、突然降ってきた顧客の要望を受入ざるを得ない場合、Ver1.1というバージョンを新たに作り、緊急リリースに対応する手法。
「成功する要求仕様 失敗する要求仕様」では、上記のような例に対する選択肢の中で、ベターな選択肢の一つがタスクブランチで緊急リリースする方法としてあげられていた。
CVS、SVN、GitやMercurialに至るバージョン管理の歴史をたどると、構成管理パターンを見出す歴史と重なる。
こういうノウハウがもっと広がれば、もっとプログラミングしやすくなるだろうと思う。
| 固定リンク
「ソフトウェア工学」カテゴリの記事
- 因果ループ図を再考する~問題の症状をシステム構造として捉えて解決策を見つける(2020.12.25)
- 第73回 SEA関西プロセス分科会「モデルベースシステムズエンジニアリングの活用」の感想~モデルの検証を形式手法で自動テスト化する(2020.12.13)
- 相殺フィードバックを再考(2020.06.17)
- SaaSのビジネスモデルがアジャイル開発を促進したという仮説(2020.06.14)
- なぜなぜ分析、FMEA、FTAの違い(2020.06.09)
「Mercurial」カテゴリの記事
- GitHubはオープンソースのプロセスを標準化した(2015.06.11)
- 「反復型ソフトウェア開発」はソフトウェア工学の良書(2013.02.09)
- Mercurialに取り込まれたコミュニティ由来の機能一覧(2013.01.12)
- WordやExcelから直接Mercurialへコミットできるアドオンmsofficehg(2012.12.07)
- RedmineでSubversion リポジトリ表示を高速化する方法(2012.11.23)
「Git・構成管理」カテゴリの記事
- YoutubeのCCNA講座が秀逸だった(2021.01.04)
- 変更管理プロセスが弱いとトラブルが多い(2021.01.04)
- RedmineでGitのbareリポジトリにアクセスする方法(2020.10.22)
- 第16回東京Redmine勉強会の感想 #redmineT(2019.05.19)
- 第19回Redmine大阪の見所 #redmineosaka(2019.01.26)
コメント