ブランチ/タグの作成

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

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

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

ブランチ/タグの作成

プロジェクトを標準的なディレクトリ構成でインポートしているなら、ブランチ/タグバージョンを作成するのはとても簡単です。

図4.51 ブランチ/タグの作成ダイアログ

ブランチ/タグの作成ダイアログ


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

新しいブランチのコピー先 URL のデフォルトは、作業コピーの基準になったコピー元 URL になっています。ブランチ/タグの URL を新しいパスに変更してください。つまり、

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

の代わりに、

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

のようにするということです。前回使用した命名規則を思い出せなければ、右にあるボタンをクリックすれば、リポジトリブラウザーが開かれ、既存のリポジトリの構造を確認することができます。

中間フォルダー

ターゲットURLを特定するとき、末端のフォルダーまですべてが存在していなければならず、存在しなければエラーメッセージが表示されます。上記の例の場合、http://svn.collab.net/repos/ProjectName/tags/というURLに対応するフォルダーが存在しなければ、Release_1.10というタグを作成することができません。

まだ中間フォルダーが存在しないURLのブランチやタグを作成したいのであれば、ダイアログ下部の中間フォルダーを作成をチェックしてください。このオプションが有効な場合、すべての中間フォルダーが自動的に作成されます。

なお、入力ミスの影響を防ぐため、このオプションはデフォルトで無効になっています。例えば、http://svn.collab.net/repos/ProjectName/tags/Release_1.10というURLを間違えてhttp://svn.collab.net/repos/ProjectName/Tags/Release_1.10と入力した場合、このオプションが無効であればエラーが表示されますが、このオプションが有効であればTagsというフォルダーが自動的に作成され、Tagstagsの両方のフォルダーができてしまう結果になります。

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

リポジトリ内の最新リビジョン

新しいブランチは、リポジトリの最新である最新リビジョンから直接コピーされます。データを作業コピーから転送する必要がないため、ブランチは非常に高速に作成されます。

リポジトリ内の特定リビジョン

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

作業コピー

新しいブランチは、ローカルの作業コピーと同一になります。作業コピーを以前のリビジョンへ更新したり、ローカルで変更を行ったりすると、これがコピーに取り込まれます。当然、そのような複雑なタグを作成する場合、リポジトリにまだ反映されていないデータは、作業コピーからリポジトリに転送されます。

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

If your working copy has other projects included with svn:externals properties, those externals will be listed at the bottom of the branch/tag dialog. For each external, the target path and the source URL is shown.

If you want to make sure that the new tag always is in a consistent state, check all the externals to have their revisions pinned. If you don't check the externals and those externals point to a HEAD revision which might change in the future, checking out the new tag will check out that HEAD revision of the external and your tag might not compile anymore. So it's always a good idea to set the externals to an explicit revision when creating a tag.

The externals are automatically pinned to either the current HEAD revision or the working copy BASE revision, depending on the source of the branch/tag:

表4.1 ピン留めされたリビジョン

コピー元ピン留めされたリビジョン
リポジトリ内の最新リビジョン外部リポジトリの最新リビジョン
リポジトリのリビジョンを指定外部リポジトリの最新リビジョン
作業コピー外部の作業コピーのBASEリビジョン


外部参照中の外部参照

プロジェクトが外部参照自信を含む外部参照を含む場合、タグ付けされません。直接の子の外部参照だけがタグ付けされます。

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

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

ブランチやタグを作成するその他の方法

作業コピーがなくてもブランチやタグを作成する方法があります。リポジトリブラウザーを開き、フォルダーを新しい場所にドラッグします。 Ctrl キーを押しながらドラッグするとコピーになり、そうでなければフォルダーはコピーされずに移動します。

マウスの右ボタンでフォルダーをドラッグする方法もあります。マウスのボタンを離すと、コンテキストメニューでフォルダーを移動するかコピーするかを選択することができます。もちろん、ブランチやタグを作成するときは、フォルダーを移動ではなくコピーしてください。

ログダイアログから行う方法もあります。例えばトランクの、特定のリビジョン(HEAD リビジョンでも古いリビジョンでも良い)のログダイアログを表示し、右クリックして リビジョンからブランチ/タグを作成 を選択します。

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

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

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

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

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

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

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

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

図4.52 切り替えダイアログ

切り替えダイアログ


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

  • タグは通常、プロジェクトの特定の場面の静的なスナップショットとして作られます。通常は開発には使用しません(それはブランチの役割であり、最初に /trunk /branches /tags というリポジトリ構造を推奨する理由です)。タグのリビジョンで作業することは よくありません が、ローカルファイルが書き込み保護されていないので、間違った操作を止める方法はありません。但し、リポジトリ内の /tags/ 以下のパスにコミットしようとした場合、 TortoiseSVN は警告するようになっています。

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

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