マニュアル

ブランチ / タグ

バージョン管理システムの機能の一つに、変更を開発の別のラインに分離する機能があります。このラインはブランチとして知られています。ブランチは、コンパイラエラーやバグでメインの開発ラインを邪魔することなく、新機能を試すためによく使用されます。新機能が十分に安定すると、開発ブランチはメインブランチ(トランク)にマージされます。

バージョン管理システムのもう一つの機能は、(リリースバージョンなどの)特定のリビジョンをマークする機能です。これにより、いつでも特定のビルドや環境を再現できます。このプロセスはタグ付けとして知られています。

Subversionにはブランチやタグ付けのための特別なコマンドはありませんが、代わりにいわゆる安価なコピーを使用します。安価なコピーはUnixのハードリンクに似ており、リポジトリ内で完全なコピーを作成する代わりに、特定のツリー/リビジョンを指す内部リンクが作成されることを意味します。その結果、ブランチとタグは非常に迅速に作成でき、リポジトリ内でほとんど追加のスペースを消費しません。

ブランチまたはタグの作成

推奨されるディレクトリ構造でプロジェクトをインポートした場合、ブランチまたはタグバージョンを作成するのは非常に簡単です

図4.54. ブランチ/タグ ダイアログ

The Branch/Tag Dialog


ブランチまたはタグにコピーしたいワーキングコピー内のフォルダーを選択し、TortoiseSVNブランチ/タグ...コマンドを選択します。

新しいブランチのデフォルトの宛先URLは、ワーキングコピーが基づいているソースURLになります。そのURLをブランチ/タグの新しいパスに編集する必要があります。つまり、

https://svn.example.com/repos/ProjectName/trunk
      

の代わりに、次のようなものを使用するかもしれません

https://svn.example.com/repos/ProjectName/tags/Release_1.10
      

前回使用した命名規則を思い出せない場合は、右側のボタンをクリックしてリポジトリブラウザを開き、既存のリポジトリ構造を表示できます。

中間フォルダー

ターゲットURLを指定するとき、最後のフォルダーまでのすべてのフォルダーがすでに存在している必要があります。そうしないと、エラーメッセージが表示されます。上記の例では、Release_1.10タグを作成するには、URL https://svn.example.com/repos/ProjectName/tags/が存在する必要があります。

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

このオプションは、タイプミスを避けるためにデフォルトで無効になっていることに注意してください。たとえば、ターゲットURLをhttps://svn.example.com/repos/ProjectName/tags/Release_1.10ではなくhttps://svn.example.com/repos/ProjectName/Tags/Release_1.10と入力した場合、オプションが無効になっているとエラーが発生しますが、オプションが有効になっているとTagsフォルダーが自動的に作成され、Tagsフォルダーとtagsフォルダーができてしまいます。

次に、コピー元を選択する必要があります。ここでは3つのオプションがあります

リポジトリ内のHEADリビジョン

新しいブランチは、HEADリビジョンからリポジトリに直接コピーされます。ワーキングコピーからデータを転送する必要はなく、ブランチは非常に迅速に作成されます。

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

新しいブランチはリポジトリに直接コピーされますが、古いリビジョンを選択できます。これは、先週プロジェクトをリリースしたときにタグを作成するのを忘れた場合に役立ちます。リビジョン番号を思い出せない場合は、右側のボタンをクリックしてリビジョンログを表示し、そこからリビジョン番号を選択します。ここでも、ワーキングコピーからデータは転送されず、ブランチは非常に迅速に作成されます。

ワーキングコピー

新しいブランチは、ローカルワーキングコピーの同一コピーです。WC内のいくつかのファイルを古いリビジョンに更新した場合、またはローカルに変更を加えた場合、コピーに正確に反映されます。当然ながら、この種の複雑なタグは、WCからリポジトリにデータがまだ存在しない場合にデータを転送する必要がある場合があります。

ワーキングコピーを新しく作成されたブランチに自動的に切り替えたい場合は、ワーキングコピーを新しいブランチ/タグに切り替えるチェックボックスを使用します。ただし、それを行う場合は、最初にワーキングコピーに変更が含まれていないことを確認してください。含まれている場合、切り替えるときにそれらの変更がブランチWCにマージされます。

ワーキングコピーにsvn:externalsプロパティで含まれている他のプロジェクトがある場合、これらの外部参照がブランチ/タグダイアログの下部にリストされます。各外部参照について、ターゲットパスとソースURLが表示されます。

新しいタグが常に一貫した状態になるようにしたい場合は、すべての外部参照がリビジョンで固定されていることを確認してください。外部参照をチェックせず、それらの外部参照が将来変更される可能性のあるHEADリビジョンを指している場合、新しいタグをチェックアウトすると、外部参照のHEADリビジョンがチェックアウトされ、タグがコンパイルできなくなる可能性があります。そのため、タグを作成するときは、外部参照を明示的なリビジョンに設定することを常にお勧めします。

外部参照は、ブランチ/タグのソースに応じて、現在のHEADリビジョンまたはワーキングコピーのBASEリビジョンのいずれかに自動的に固定されます

表4.1. 固定されたリビジョン

コピー元固定されたリビジョン
リポジトリ内のHEADリビジョン外部参照のリポジトリ HEADリビジョン
リポジトリ内の特定のリビジョン外部参照のリポジトリ HEADリビジョン
ワーキングコピー外部参照のWC BASEリビジョン


外部参照内の外部参照

外部参照として含まれているプロジェクト自体が外部参照を含んでいる場合、それらはタグ付けされません!直接の子である外部参照のみがタグ付けできます。

OKを押して、新しいコピーをリポジトリにコミットします。ログメッセージを必ず入力してください。コピーはリポジトリ内に作成されることに注意してください。

ワーキングコピーを新しく作成されたブランチに切り替えることを選択しない限り、ブランチまたはタグの作成はワーキングコピーに影響を与えません。WCからブランチを作成した場合でも、これらの変更はトランクではなく新しいブランチにコミットされるため、WCは依然としてトランクに関して変更済みとしてマークされる可能性があります。

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

ワーキングコピーを持たずにブランチまたはタグを作成することもできます。それを行うには、リポジトリブラウザを開きます。そこで、フォルダーを新しい場所にドラッグできます。コピーを作成するには、ドラッグ中にCtrlキーを押したままにする必要があります。そうしないと、フォルダーはコピーされずに移動されます。

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

もう1つの方法は、ログダイアログからです。たとえば、トランクのログダイアログを表示し、リビジョン(一番上のHEADリビジョンまたは以前のリビジョン)を選択し、右クリックしてリビジョンからブランチ/タグを作成...を選択できます。

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

...それが(実際には)問題ではありません。チェックアウトはリポジトリ内の目的のブランチからすべてをワーキングディレクトリにダウンロードしますが、TortoiseSVN切り替え...は変更されたデータのみをワーキングコピーに転送します。ネットワーク負荷に優しく、あなたの忍耐力にも優しいです。 :-)

新しく生成されたブランチまたはタグを操作できるようにするには、いくつかの方法があります。次のことができます

  • TortoiseSVNチェックアウトして、空のフォルダーに新しいチェックアウトを作成します。ローカルディスク上の任意の場所にチェックアウトでき、リポジトリから必要な数のワーキングコピーを作成できます。

  • 現在のワーキングコピーをリポジトリ内の新しく作成されたコピーに切り替えます。もう一度、プロジェクトの最上位フォルダーを選択し、コンテキストメニューからTortoiseSVN切り替え...を使用します。

    次のダイアログで、作成したばかりのブランチのURLを入力します。ヘッドリビジョンラジオボタンを選択し、OKをクリックします。ワーキングコピーが新しいブランチ/タグに切り替えられます。

    切り替えは更新と同様に機能し、ローカルの変更を破棄することはありません。ワーキングコピーに加えたまだコミットされていない変更は、切り替えを行うときにマージされます。これを避けたい場合は、切り替える前に変更をコミットするか、ワーキングコピーをすでにコミットされたリビジョン(通常はHEAD)に戻す必要があります。

  • トランクとブランチで作業したいが、新しいチェックアウトのコストをかけたくない場合は、Windowsエクスプローラーを使用して、トランクのチェックアウトのコピーを別のフォルダーに作成し、そのコピーをTortoiseSVN切り替え...で新しいブランチに切り替えることができます。

図4.55. 切り替え ダイアログ

The Switch Dialog


Subversion自体はタグとブランチを区別していませんが、通常の使用方法は少し異なります。

  • タグは通常、特定の段階でのプロジェクトの静的なスナップショットを作成するために使用されます。そのため、通常は開発には使用されません。それがブランチの目的であり、最初に/trunk /branches /tagsリポジトリ構造を推奨した理由です。タグリビジョンでの作業は推奨されませんが、ローカルファイルは書き込み保護されていないため、誤ってこれを行ってしまうのを防ぐものはありません。ただし、/tags/を含むリポジトリ内のパスにコミットしようとすると、TortoiseSVNは警告を表示します。

  • すでにタグ付けしたリリースにさらに変更を加える必要がある場合があります。これに対処する正しい方法は、最初にタグから新しいブランチを作成し、ブランチをコミットすることです。このブランチで変更を行い、次にこの新しいブランチから新しいタグ(例:Version_1.0.1)を作成します。

  • ブランチから作成されたワーキングコピーを変更してコミットすると、すべての変更が新しいブランチに移動し、トランクには移動しません。変更のみが保存されます。残りは安価なコピーのままです。

TortoiseSVN ホームページ