ブランチ・タグ付け

バージョン管理システムの特徴のひとつに、開発の別のラインに変更点を隔離することがあります。このラインはブランチとして知られています。ブランチは、コンパイルエラーやバグで開発の本流を混乱させずに、新機能を十分に試すのに使用されます。新機能が十分安定したら、開発ブランチをメインブランチ (トランク) に マージ します。

バージョン管理システムのもう一つの特徴は、特定のリビジョン (リリースリビジョンなど) をマークする能力です。このためいつでも確実にビルドや環境を再作成できます。このプロセスを タグ付け と呼んでいます。

Subversion には、ブランチ付けやタグ付け用の特別なコマンドはありませんが、代わりに 簡易コピー と呼ばれるものを使用できます。チープコピーは、Unix のハードリンクと似ています。つまりリポジトリの完全なコピーを作成する代わりに、指定したツリーやリビジョンを指す内部リンクを作成します。そのため、ブランチやタグの作成は、非常に高速で、リポジトリに余分なスペースをほとんど使用しません。

ブランチ・タグの作成

プロジェクトをお勧めディレクトリ構成でインポートしているなら、ブランチ・タグバージョンを作成するにはとてもシンプルです。

図4.34 ブランチ・タグダイアログ

ブランチ・タグダイアログ


ブランチやタグにコピーしたい作業コピーのフォルダを選択してから、TortoiseSVN分岐/タグ... コマンドを選択してください。

新しいブランチのデフォルトの先 URL は、作業コピーの基準になった元 URL になっています。ブランチ・タグの新しいパスに URL を編集する必要があるでしょう。つまり、

    http://svn.collab.net/repos/ProjectName/trunk

の代わりに、

    http://svn.collab.net/repos/ProjectName/tags/Release_1.10

のようにするということです。前回使用した命名規則を思い出せなければ、既存のリポジトリ構造を見るのに、リポジトリブラウザを開く右のボタンを押してください。

では、コピー元を選択してください、ここでは 3 種類の選択肢があります。

リポジトリの最新 (HEAD) リビジョン

新しいブランチは、リポジトリの最新 (HEAD) リビジョンから直接コピーされます。作業コピーから移されるデータはありませんし、ブランチは非常に高速に作成されます。

リポジトリのリビジョン指定

新しいブランチは直接リポジトリからコピーされますが、古いリビジョンを指定できます。先週プロジェクトをリリースした際に、タグを作り忘れたときなどに便利です。リビジョン番号を思い出せなければ、リビジョンログを表示する右のボタンを押し、そこからリビジョン番号を選択してください。こちらも作業コピーから移されるデータはありませんし、ブランチは非常に高速に作成されます。

作業コピー

新しいブランチは、手元の作業コピーと同一のコピーになります。作業コピーに対して、以前のリビジョンへ更新したり、手元で変更を行ったりすると、これがコピーに取り込まれます。当然そういった複雑なタグの場合、リポジトリに既になければ、作業コピーからリポジトリへ転送が発生するでしょう。

新しく作成したブランチに、自動的に作業コピーを切り替えたい場合、新しい分岐/タグへ作業コピーを切り替え チェックボックスを使用してください。しかしそうするには、まず作業コピーに変更が含まれていてはいけません。もし含まれていると、切り替えたときにブランチの作業コピーに変更点がマージされていまいます。

リポジトリに新しいコピーをコミットするのに OK を押してください。ログメッセージを書くのを忘れないでください。コピーは リポジトリの中 で行われることに注意してください。

作業コピーを新しく作成したブランチに切り替えなければ、ブランチやタグを作成しても、作業コピーには影響を 与えない ことに注意してください。作業コピーからブランチを作成したとしても、その変更はトランクではなく新しいブランチにコミットされます。そのため、作業コピーのマークは、変更されたままになっているかもしれません。

チェックアウトするか切り替えるか...

……これは (それほどじゃないですが) 問題です。チェックアウトは、リポジトリの指定したブランチから作業コピーへすべてダウンロードしますが、TortoiseSVN切り替え... は変更のあったデータのみを作業コピーに転送します。ネットワーク負荷をとるか、忍耐力をとるかですね。:-)

新しく生成したブランチやタグで作業するには、いくつかの方法があります。以下のように行ってください。

  • TortoiseSVNチェックアウト は空のフォルダに新鮮なチェックアウトを行います。ローカルディスクのどこにもチェックアウトでき、お好みにあわせ、いくつでもリポジトリから作業コピーを作成できます。

  • 現在の作業コピーを、リポジトリに新しく作成したコピーに切り替えます。再びプロジェクトの最上位フォルダを選択し、コンテキストメニューから TortoiseSVN切り替え... を使用してください。

    続くダイアログで、たった今作成したブランチの URL を入力してください。最新のリビジョン ラジオボタンを選択し、OK をクリックしてください。作業コピーが新しいブランチ・タグに切り替えられます。

    切り替えは、手元の変更を決して破棄しないので、ちょうど更新のように動作します。まだコミットしていない作業コピーへの変更は、切り替えるとマージされます。こうして欲しくなければ、切り替える前にコミットをしておかねばならないか、既にコミットしてあるリビジョン (大抵 HEAD) まで、変更を取り消さなければなりません。

  • トランクやブランチで作業したくても、まっさらなチェックアウトに費やしたくない場合、トランクをチェックアウトした作業コピーを、Windows エクスプローラでコピーし、 TortoiseSVN切り替え... を使用することで、新しいブランチにすることができます。

図4.35 切り替えダイアログ

切り替えダイアログ


Subversion 自身はタグとブランチを区別しませんが、通常以下のように多少使い分けをします。

  • タグは、典型的には、プロジェクトの特定の段階で静的スナップショットを作成するのに使います。通常は開発には使用しません。開発にはブランチを使用します。これが最初に/trunk /branches /tags というリポジトリ構造をお勧めした理由です。タグリビジョンで作業するのは 名案ではありません が、手元のファイルに書き込み保護をかけられませんので、誤って編集してしまうのを止められません。しかし、/tags/ を含むリポジトリパスにコミットしようとしたときに、TortoiseSVN は警告を発します。

  • おそらく既にタグ付けしたリリースについて、さらに修正を加える必要があるかもしれません。これを扱う正しい方法は、まずタグから新しいブランチを作成し、ブランチをコミットすることです。変更をこのブランチに行い、その後、新しいブランチから Version_1.0.1 といったように、新しいタグを作成してください。

  • ブランチから作成した作業コピーを変更し、コミットする場合、すべての変更は新しいブランチに行われ、トランクには 行われません。変更点のみ格納されます。残りは簡易コピーのままになります。