バージョン管理システムの機能の一つに、変更を開発の別のラインに分離する機能があります。このラインはブランチとして知られています。ブランチは、コンパイラエラーやバグでメインの開発ラインを邪魔することなく、新機能を試すためによく使用されます。新機能が十分に安定すると、開発ブランチはメインブランチ(トランク)にマージされます。
バージョン管理システムのもう一つの機能は、(リリースバージョンなどの)特定のリビジョンをマークする機能です。これにより、いつでも特定のビルドや環境を再現できます。このプロセスはタグ付けとして知られています。
Subversionにはブランチやタグ付けのための特別なコマンドはありませんが、代わりにいわゆる「安価なコピー」を使用します。安価なコピーはUnixのハードリンクに似ており、リポジトリ内で完全なコピーを作成する代わりに、特定のツリー/リビジョンを指す内部リンクが作成されることを意味します。その結果、ブランチとタグは非常に迅速に作成でき、リポジトリ内でほとんど追加のスペースを消費しません。
推奨されるディレクトリ構造でプロジェクトをインポートした場合、ブランチまたはタグバージョンを作成するのは非常に簡単です
ブランチまたはタグにコピーしたいワーキングコピー内のフォルダーを選択し、 → コマンドを選択します。
新しいブランチのデフォルトの宛先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リビジョンからリポジトリに直接コピーされます。ワーキングコピーからデータを転送する必要はなく、ブランチは非常に迅速に作成されます。
新しいブランチはリポジトリに直接コピーされますが、古いリビジョンを選択できます。これは、先週プロジェクトをリリースしたときにタグを作成するのを忘れた場合に役立ちます。リビジョン番号を思い出せない場合は、右側のボタンをクリックしてリビジョンログを表示し、そこからリビジョン番号を選択します。ここでも、ワーキングコピーからデータは転送されず、ブランチは非常に迅速に作成されます。
新しいブランチは、ローカルワーキングコピーの同一コピーです。WC内のいくつかのファイルを古いリビジョンに更新した場合、またはローカルに変更を加えた場合、コピーに正確に反映されます。当然ながら、この種の複雑なタグは、WCからリポジトリにデータがまだ存在しない場合にデータを転送する必要がある場合があります。
ワーキングコピーを新しく作成されたブランチに自動的に切り替えたい場合は、ワーキングコピーを新しいブランチ/タグに切り替えるチェックボックスを使用します。ただし、それを行う場合は、最初にワーキングコピーに変更が含まれていないことを確認してください。含まれている場合、切り替えるときにそれらの変更がブランチWCにマージされます。
ワーキングコピーにsvn:externals
プロパティで含まれている他のプロジェクトがある場合、これらの外部参照がブランチ/タグダイアログの下部にリストされます。各外部参照について、ターゲットパスとソースURLが表示されます。
新しいタグが常に一貫した状態になるようにしたい場合は、すべての外部参照がリビジョンで固定されていることを確認してください。外部参照をチェックせず、それらの外部参照が将来変更される可能性のあるHEADリビジョンを指している場合、新しいタグをチェックアウトすると、外部参照のHEADリビジョンがチェックアウトされ、タグがコンパイルできなくなる可能性があります。そのため、タグを作成するときは、外部参照を明示的なリビジョンに設定することを常にお勧めします。
外部参照は、ブランチ/タグのソースに応じて、現在のHEADリビジョンまたはワーキングコピーのBASEリビジョンのいずれかに自動的に固定されます
表4.1. 固定されたリビジョン
コピー元 | 固定されたリビジョン |
---|---|
リポジトリ内のHEADリビジョン | 外部参照のリポジトリ HEADリビジョン |
リポジトリ内の特定のリビジョン | 外部参照のリポジトリ HEADリビジョン |
ワーキングコピー | 外部参照のWC BASEリビジョン |
外部参照として含まれているプロジェクト自体が外部参照を含んでいる場合、それらはタグ付けされません!直接の子である外部参照のみがタグ付けできます。
リポジトリ内に作成されることに注意してください。
を押して、新しいコピーをリポジトリにコミットします。ログメッセージを必ず入力してください。コピーはワーキングコピーを新しく作成されたブランチに切り替えることを選択しない限り、ブランチまたはタグの作成はワーキングコピーに影響を与えません。WCからブランチを作成した場合でも、これらの変更はトランクではなく新しいブランチにコミットされるため、WCは依然としてトランクに関して変更済みとしてマークされる可能性があります。
ワーキングコピーを持たずにブランチまたはタグを作成することもできます。それを行うには、リポジトリブラウザを開きます。そこで、フォルダーを新しい場所にドラッグできます。コピーを作成するには、ドラッグ中にCtrlキーを押したままにする必要があります。そうしないと、フォルダーはコピーされずに移動されます。
右マウスボタンでフォルダーをドラッグすることもできます。マウスボタンを離すと、コンテキストメニューからフォルダーを移動するかコピーするかを選択できます。もちろん、ブランチまたはタグを作成するには、フォルダーを移動するのではなくコピーする必要があります。
もう1つの方法は、ログダイアログからです。たとえば、トランクのログダイアログを表示し、リビジョン(一番上のHEADリビジョンまたは以前のリビジョン)を選択し、右クリックして
を選択できます。...それが(実際には)問題ではありません。チェックアウトはリポジトリ内の目的のブランチからすべてをワーキングディレクトリにダウンロードしますが、
→ は変更されたデータのみをワーキングコピーに転送します。ネットワーク負荷に優しく、あなたの忍耐力にも優しいです。 :-)新しく生成されたブランチまたはタグを操作できるようにするには、いくつかの方法があります。次のことができます
→ して、空のフォルダーに新しいチェックアウトを作成します。ローカルディスク上の任意の場所にチェックアウトでき、リポジトリから必要な数のワーキングコピーを作成できます。
現在のワーキングコピーをリポジトリ内の新しく作成されたコピーに切り替えます。もう一度、プロジェクトの最上位フォルダーを選択し、コンテキストメニューから
→ を使用します。次のダイアログで、作成したばかりのブランチのURLを入力します。ヘッドリビジョンラジオボタンを選択し、 をクリックします。ワーキングコピーが新しいブランチ/タグに切り替えられます。
切り替えは更新と同様に機能し、ローカルの変更を破棄することはありません。ワーキングコピーに加えたまだコミットされていない変更は、切り替えを行うときにマージされます。これを避けたい場合は、切り替える前に変更をコミットするか、ワーキングコピーをすでにコミットされたリビジョン(通常はHEAD)に戻す必要があります。
トランクとブランチで作業したいが、新しいチェックアウトのコストをかけたくない場合は、Windowsエクスプローラーを使用して、トランクのチェックアウトのコピーを別のフォルダーに作成し、そのコピーを
→ で新しいブランチに切り替えることができます。
Subversion自体はタグとブランチを区別していませんが、通常の使用方法は少し異なります。
タグは通常、特定の段階でのプロジェクトの静的なスナップショットを作成するために使用されます。そのため、通常は開発には使用されません。それがブランチの目的であり、最初に/trunk /branches /tags
リポジトリ構造を推奨した理由です。タグリビジョンでの作業は推奨されませんが、ローカルファイルは書き込み保護されていないため、誤ってこれを行ってしまうのを防ぐものはありません。ただし、/tags/
を含むリポジトリ内のパスにコミットしようとすると、TortoiseSVNは警告を表示します。
すでにタグ付けしたリリースにさらに変更を加える必要がある場合があります。これに対処する正しい方法は、最初にタグから新しいブランチを作成し、ブランチをコミットすることです。このブランチで変更を行い、次にこの新しいブランチから新しいタグ(例:Version_1.0.1
)を作成します。
ブランチから作成されたワーキングコピーを変更してコミットすると、すべての変更が新しいブランチに移動し、トランクには移動しません。変更のみが保存されます。残りは安価なコピーのままです。