« Pro Git 日本語版 | トップページ | iPadZine~iPadで読める電子書籍サービス »

2010/06/27

Rebaseとトピックブランチ

Gitのリベース(Rebase)機能がようやく分かったのでメモ。
MercurialのMQは、GitのRebase機能を実現する重要な機能だ。

【元ネタ】
git rebaseって超便利じゃね? - Seasons.NET

Gitを使いこなすための20のコマンド - SourceForge.JP Magazine : オープンソースの話題満載

履歴の書き換えによって生じる問題

Mercurial: "Managing change with Mercurial Queues" を読む(3) | Inside ASCADE

Pro Gitの日本語

Mercurialではじめる分散構成管理:第6回 勝手に「分散構成管理」 ~非Mercurial環境との共存|gihyo.jp … 技術評論社

4.6. コミット ― TortoiseHg v0.8.2 documentation

Subversion ユーザーが Git を使ってみた (基本操作編) - まちゅダイアリー(2010-05-06)

入門Mercurial Linux/Windows対応」によると、リベースとは「ベースとなるソースを更新する」意味。
入門Git」では、216頁の図13-1.トピックのリベースで詳しく解説されている。

トピックブランチは、タスクブランチの一種で、一つのテーマに関してだけ修正や機能追加を試みるブランチ。
GitやMercurialなどの分散バージョン管理で多用されるブランチだ。

トピックブランチの利点は、メインライン(trunk)に中途半端なソース修正をコミットしないことと、トピックブランチでメインラインと無関係に自由に実験出来ること。
前者の利点は、メインラインが常時リリース可能な品質を保証できるし、後者の利点は、パッチやハックを自由に行って、実験できることにある。

しかし、メインラインでどんどん機能追加されていって、トピックブランチのソースが古くなった場合、どこかの時点で、トピックブランチへtrunkからPullしなくてはならない。

入門Git」によれば、トピックブランチへtrunkからPullするのは初心者が陥りやすいミスだと言う。
何故なら、trunkからマージされると、せっかくトピックブランチで育んだパッチが動かなくなるからだ。

だから、trunkからトピックブランチへのマージは、Rebaseが推奨されている。
Rebaseの仕組みは、トピックブランチのパッチを作り、更にtrunkの最新リビジョンから新規ブランチを作り、その新規ブランチへトピックブランチのパッチをマージすること。
つまり、Rebaseとは「ベースとなるソースを更新する」意味で文字通り、トピックブランチ→trunkへマージ作業が行われて、メインライン(ベースとなるソース)が更新される。

Rebaseによってコンフリクトが起きたり、動作しなくなったとしても、コミット履歴はtrunkへトピックブランチのパッチが当てられたことで残るので、その後の改修がやりやすくなる。

逆に、trunk→トピックブランチへPull(実際はmerge)すると、トピックブランチのパッチが動作しなくなってしまう危険性が高い。
コミット履歴は、トピックブランチへtrunkの機能がマージされたことが残るので、パッチの部分が分かりにくくなる。

GitがMercurialよりも優れている利点の一つが、Rebaseを使ってトピックブランチにturnkの新機能を追加しながら、トピックブランチを育てることが簡単なことにある。
最新版のMercurialでも、MQの機能がRebaseの機能を代用してくれるので、Rebaseを実施しやすくなった。
TorotiseHgでも、MQの設定をすれば、Rebaseが使える。
※注意:Mercurialでもrebaseコマンドがあり、Gitと同等な機能になっている。

分散バージョン管理の最大の利点である自動マージ機能は、トピックブランチの品質向上に大きく寄与してくれる。
トピックブランチのワークフローはバグ修正のそれと全く同じなので、システムテストや受入テストなどリリース直前のテスト管理や品質管理で大きな威力を発揮するだろうと思う。

最後に、「入門Git」は分散バージョン管理を使いこなす上で最もお勧めの書籍だ。
特にトピックブランチとRebaseの関係について詳しく説明している13章「リモートリポジトリ定義」と、OSSで主流のワークフローであるパッチ作業について説明している10章「パッチベースのワークフロー」は、非常に重要だ。

入門Mercurial Linux/Windows対応」にも12章「ソースアーカイブベースの勝手Mercurial化」で、MercurialのRebase作業について書かれているので要注意。

【補注】
objectxさんのコメント通り、Mercurialのextensionでrebaseコマンドが使えるようになっている。

RebaseExtension - Mercurial

tortoisehgならば、mecurial.iniへ
[extensions]
rebase =
を設定するだけでいい。

|

« Pro Git 日本語版 | トップページ | iPadZine~iPadで読める電子書籍サービス »

廃止Mercurial」カテゴリの記事

構成管理・Git」カテゴリの記事

コメント

既に誰かが報告しているかもしれませんが

http://mercurial.selenic.com/wiki/RebaseExtension

1.1 から rebase 出来る様になっています。extension 扱いですが hg に同梱です。

投稿: objectx | 2010/06/27 22:21

objectx さん、コメントありがとうございました。
追記しておきました。

投稿: あきぴー | 2010/06/27 23:03

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: Rebaseとトピックブランチ:

« Pro Git 日本語版 | トップページ | iPadZine~iPadで読める電子書籍サービス »