いまさら聞けない、成功するブランチモデルとgit-flowの基礎知識Gitブランチを使いこなすgit-flow/GitHub Flow入門(1)(1/2 ページ)

数回に渡ってgit-flowとGitHub Flowを使ったGitの活用テクニックを紹介します。初回は、ブランチ管理の課題と効率的にバージョン管理できる5つのブランチモデルと、ブランチの管理を簡単に行えるツール「git-flow」について。

» 2013年11月18日 18時00分 公開
[岡本隆史@IT]

 Gitなどの次世代のバージョン管理ツールの特徴として、ブランチの機能を高度に活用できるという利点があります。Gitのブランチを生かしたツール・フローとして「git-flow」「GitHub Flow」が注目を浴びていますが、本連載では数回に渡ってgit-flowとGitHub Flowを使ったGitの活用テクニックを紹介します。初回は、git-flowの概要を紹介します。

効率的にバージョン管理できるブランチモデルと「git-flow」

 Gitなど、次世代のバージョン管理ツールの特徴として、ブランチを手軽に活用できるという点があります。CVS、Subversionの時代からブランチという概念はありましたが、それまではバージョン1.x、バージョン2.xなど、リリースごとのメンテナンスのブランチくらいしか利用されていませんでした。Gitを利用することにより、ブランチのマージを簡単に行えるようになり、より高度にブランチが利用されるようになりました。

 Gitのブランチを活用した開発モデルとして、Vincent Driessen氏が、「A successful Git branching model」を提唱しています。

 このブランチモデルに沿って開発を行うことにより、効率的にバージョン管理できるようになります。

 また、このモデルに沿ってブランチを管理すると、複雑なブランチの作成やマージ操作を行う必要がありますが、同氏は、「A successful Git branching model」によるブランチの管理を簡単に行えるツールとして、git-flowを公開しています。

 正確には、「A successful Git branching model」の利用をサポートするツールがgit-flowなのですが、git-flowの方が広く認知されているので、本稿ではgit-flowによるブランチ管理として紹介します。

ブランチ管理の課題

 git-flowの紹介に入る前に、ブランチ管理における課題を見ていきましょう。

Subversionの不安定なブランチ

 従来のSubversionを利用したバージョン管理では、主にトランク(木の幹)でバージョン管理を行ってきました。トランク上に最新のコードをどんどんコミットしていくと、一時的にアプリケーションが不安定になってしまいます。

 近年、継続的インテグレーションや継続的デリバリ/リリースなど、安定したプロダクトを継続的にテスト・リリースする手法が注目を浴びていますが、コミットされたブランチが不安定になるのは問題です。

バグフィックスのマージ漏れや不必要な機能のマージ

 複数のブランチを管理している場合、致命的なバグが見つかった際には、メンテナンスブランチ上で修正を行いますが、その修正を開発版へ取り込むのを忘れたり、開発版上での軽微な修正を間違ってメンテナンスブランチへ反映させたりすることがあります。

図1 マージ漏れと余分なマージ

 ブランチの管理ルールをきちんと決めて置かないと、不具合のマージ漏れや不必要なマージを行ってしまう可能性がありました。

ブランチ上の作業のトレーサビリティ

 Gitでは、デフォルトで「ファーストフォワードマージ」と呼ばれるマージが行われます。これは、ブランチをマージする際に、マージ先にコミットが存在しない場合、コミットがそのままマージ先のブランチにくっついてしまい、マージした履歴が残らないというものです。

図2 ファーストフォワードマージ

 ファーストフォワードマージを行った場合、ブランチでのコミット履歴はマージしたブランチで確認できますが、どのコミットがどのブランチで行った作業なのか分からなくなってしまいます。

 git-flowを利用することにより、これらの問題を解決できます。次ページからは、具体的にgit-flowのブランチモデルを見ていきましょう。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。