バージョン管理システムの特徴のひとつに、開発の別のラインに変更を隔離できることがあります。このラインは ブランチ と呼ばれています。ブランチは、開発のメインラインにコンパイルエラーやバグで混乱させることなく、新機能のを試験するために使用されます。新機能が充分に安定したら、開発ブランチをメインブランチ(トランク)に マージ して書き戻します。
バージョン管理システムのもうひとつの特徴として、リリースしたリビジョンなど特定のリビジョンをマークする機能があります。このため、いつでも確実にビルドや環境を再作成できます。このプロセスは タグ付け と呼ばれています。
Subversion には、ブランチやタグを作成するための特別なコマンドはありませんが、代わりに 「簡易コピー」 と呼ばれるものを使用します。簡易コピーは、 Unix のハードリンクと似ています。つまり、リポジトリの完全なコピーを作成する代わりに、指定したツリーやリビジョンを指す内部リンクを作成します。そのため、ブランチやタグの作成は、非常に高速で、リポジトリに追加スペースをほとんど使用しません。
プロジェクトを標準的なディレクトリ構成でインポートしているなら、ブランチ/タグバージョンを作成するのはとても簡単です。
ブランチやタグにコピーしたい作業コピーのフォルダーを選択してから、 → コマンドを実行してください。
新しいブランチのコピー先 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
というフォルダーが自動的に作成され、Tags
とtags
の両方のフォルダーができてしまう結果になります。
そして、コピーの作成元を選択してください、ここでは3つの選択肢があります。
新しいブランチは、リポジトリの最新である最新リビジョンから直接コピーされます。データを作業コピーから転送する必要がないため、ブランチは非常に高速に作成されます。
新しいブランチは直接リポジトリからコピーされますが、古いリビジョンを指定できます。先週プロジェクトをリリースした際に、タグを作り忘れたときなどに便利です。リビジョン番号を思い出せなければ、右のボタンを押すとリビジョンログが表示されるので、そこからリビジョン番号を選択してください。こちらも作業コピーから転送されるデータはなく、ブランチは非常に高速に作成されます。
新しいブランチは、ローカルの作業コピーと同一になります。作業コピーを以前のリビジョンへ更新したり、ローカルで変更を行ったりすると、これがコピーに取り込まれます。当然、そのような複雑なタグを作成する場合、リポジトリにまだ反映されていないデータは、作業コピーからリポジトリに転送されます。
作業コピーを新しく作成したブランチに自動的に切り替えたい場合、作業コピーを新しいブランチ/タグへ切り替える チェックボックスをチェックしてください。しかしそうするには、まず作業コピーに変更が含まれていないことを確認してください。もし含まれていると、切り替えたときにブランチの作業コピーに変更点がマージされていまいます。
もし作業コピーが svn:externals
プロパティで別のプロジェクトを含んでいると、外部項目がブランチ/タグダイアログの下部に一覧表示されます。各外部項目とそのターゲットパス、ソースURL、リビジョンが表示されます。
新しいタグを常に一貫した状態にするためには、すべての外部項目の持つリビジョンが固定されていることを確認する必要があります。外部項目を確認せず、また外部項目のリビジョンが将来変更される可能性のある HEAD を指定していた場合、新しいタグをチェックアウトする際に外部項目はその時点での HEAD リビジョンが取得されてしまい、コンパイルに失敗する可能性があります。そのため、タグを作成するときには、常に外部項目に明示的なリビジョン番号を設定することをお勧めします。
外部項目はブランチ/タグのソースに応じて自動的に現在の HEAD か作業コピーの BASE に固定されます。
表4.1 ピン留めされたリビジョン
コピー元 | ピン留めされたリビジョン |
---|---|
リポジトリ内の最新リビジョン | 外部リポジトリの最新リビジョン |
リポジトリのリビジョンを指定 | 外部リポジトリの最新リビジョン |
作業コピー | 外部の作業コピーのBASEリビジョン |
プロジェクトが外部参照自信を含む外部参照を含む場合、タグ付けされません。直接の子の外部参照だけがタグ付けされます。
リポジトリに新しいコピーをコミットするには リポジトリの内部 で行われることに注意してください。
を押してください。ログメッセージを書くのを忘れないでください。コピーは作業コピーを新しく作成したブランチに切り替えなければ、ブランチやタグを作成しても、作業コピーには影響を 与えない ことに注意してください。作業コピーからブランチを作成したとしても、その変更はトランクではなく新しいブランチにコミットされます。そのため、作業コピーのマークは、変更されたままになっているかもしれません。
作業コピーがなくてもブランチやタグを作成する方法があります。リポジトリブラウザーを開き、フォルダーを新しい場所にドラッグします。 Ctrl キーを押しながらドラッグするとコピーになり、そうでなければフォルダーはコピーされずに移動します。
マウスの右ボタンでフォルダーをドラッグする方法もあります。マウスのボタンを離すと、コンテキストメニューでフォルダーを移動するかコピーするかを選択することができます。もちろん、ブランチやタグを作成するときは、フォルダーを移動ではなくコピーしてください。
ログダイアログから行う方法もあります。例えばトランクの、特定のリビジョン(HEAD リビジョンでも古いリビジョンでも良い)のログダイアログを表示し、右クリックして
を選択します。……それが(それほどではありませんが)問題です。チェックアウトは、リポジトリの指定したブランチから作業コピーへすべてダウンロードしますが、
→ は変更のあったデータのみを作業コピーに転送します。ネットワーク負荷をとるか、忍耐力をとるかですね。:-)新しく作成したブランチやタグで作業するには、いくつかの方法があります。次のように行ってください。
→ は空のフォルダーに新鮮なチェックアウトを行います。ローカルディスクのどこにもチェックアウトでき、お好みにあわせ、いくつでもリポジトリから作業コピーを作成できます。
現在の作業コピーを、リポジトリに新しく作成したコピーに切り替えます。再びプロジェクトの最上位フォルダーを選択し、コンテキストメニューから
→ を使用してください。続くダイアログで、たった今作成したブランチの URL を入力してください。 HEAD リビジョン ラジオボタンを選択し、 をクリックしてください。作業コピーが新しいブランチ/タグに切り替えられます。
切り替えは、ローカルの変更を決して破棄しないので、ちょうど更新のように動作します。まだコミットしていない作業コピーへの変更は、切り替えるとマージされます。こうして欲しくなければ、切り替える前にコミットをしておくか、作業コピーの変更を取り消し、既にコミットしてあるリビジョン(通常は HEAD リビジョン)まで戻さなければなりません。
トランクやブランチで作業したくても、まっさらなチェックアウトに時間を費やしたくない場合、トランクをチェックアウトした作業コピーを Windows エクスプローラーでコピーし、
→ を使用して、新しいブランチに切り替える方法もあります。
Subversion 自身はタグとブランチを区別しませんが、通常は以下のように少し異なる使い方をします。
タグは通常、プロジェクトの特定の場面の静的なスナップショットとして作られます。通常は開発には使用しません(それはブランチの役割であり、最初に /trunk /branches /tags
というリポジトリ構造を推奨する理由です)。タグのリビジョンで作業することは よくありません が、ローカルファイルが書き込み保護されていないので、間違った操作を止める方法はありません。但し、リポジトリ内の /tags/
以下のパスにコミットしようとした場合、 TortoiseSVN は警告するようになっています。
既にタグ付けしたリリースに、変更を加える必要が発生することもあります。これを扱う正しい方法は、タグから新しいブランチを作成し、そのブランチをコミットすることです。変更をこのブランチに行い、その後、新しいブランチから Version_1.0.1
といったように、新しいタグを作成してください。
ブランチから作成した作業コピーを変更し、コミットする場合、すべての変更は新しいブランチに行われ、トランクには 行われません 。変更点のみ格納されます。残りは簡易コピーのままになります。