ワーキングコピーを、いくつかの異なるチェックアウトで構成すると便利な場合があります。例えば、リポジトリ内の異なる場所、あるいは全く異なるリポジトリから、異なるファイルやサブディレクトリを取得したい場合などです。すべてのユーザーが同じレイアウトを持つようにしたい場合は、必要な場所に指定されたリソースをプルインするために、svn:externals
プロパティを定義できます。
例えば、/project1
のワーキングコピーを D:\dev\project1
にチェックアウトするとします。D:\dev\project1
フォルダーを選択し、右クリックして、コンテキストメニューから → を選択します。プロパティダイアログが表示されます。次に、「Subversion」タブに移動します。そこで、プロパティを設定できます。 をクリックします。プロパティダイアログで、既存の svn:externals
が存在する場合は、ダブルクリックするか、 ボタンをクリックして、メニューから 「externals」
を選択します。新しい外部アイテムを追加するには、 をクリックし、表示されたダイアログで必要な情報を入力します。
URL は適切にエスケープする必要があります。そうしないと機能しません。例えば、各スペースを %20
に置き換える必要があります。
ローカルパスにスペースやその他の特殊文字を含める場合は、二重引用符で囲むか、特殊文字の前に Unix シェルスタイルのエスケープ文字として \
(バックスラッシュ) 文字を使用できます。もちろん、これはパス区切り文字として /
(フォワードスラッシュ) を使用する必要があることも意味します。この動作は Subversion 1.6 の新機能であり、古いクライアントでは機能しないことに注意してください。
上記の記述のように、すべての外部定義で明示的なリビジョン番号を使用することを強くお勧めします。そうすることで、外部情報の異なるスナップショットをプルダウンするタイミングと、プルダウンする正確なスナップショットを決定できます。制御できない可能性のあるサードパーティリポジトリへの変更に驚かされないという常識的な側面に加えて、明示的なリビジョン番号を使用すると、ワーキングコピーを以前のリビジョンにバックデートするときに、外部定義も以前のリビジョンで表示されていた状態に戻ります。これにより、外部ワーキングコピーは、リポジトリが以前のリビジョンにあったときに それら がどのように見えていたかに一致するように更新されます。ソフトウェアプロジェクトの場合、これは複雑なコードベースの古いスナップショットのビルドが成功するか失敗するかの違いになる可能性があります。
svn:externals
プロパティの編集ダイアログでは、外部アイテムを選択し、それらを明示的に HEAD リビジョンに自動的に設定できます。
外部プロジェクトが同じリポジトリ内にある場合、そこで行った変更は、メインプロジェクトをコミットするときにコミットリストに含まれます。
外部プロジェクトが異なるリポジトリにある場合、外部プロジェクトに対して行った変更は、メインプロジェクトをコミットするときに表示または示されますが、これらの外部変更は個別にコミットする必要があります。
svn:externals
定義で絶対 URL を使用し、ワーキングコピーを再配置する必要がある場合 (つまり、リポジトリの URL が変更された場合)、外部アイテムは変更されず、機能しなくなる可能性があります。
このような問題を回避するために、Subversion クライアントバージョン 1.5 以降では、相対外部 URL がサポートされています。相対 URL を指定する 4 つの異なる方法がサポートされています。次の例では、http://example.com/svn/repos-1
に 1 つ、http://example.com/svn/repos-2
にもう 1 つの 2 つのリポジトリがあると仮定します。http://example.com/svn/repos-1/project/trunk
のチェックアウトを C:\Working
に行い、svn:externals
プロパティは trunk に設定されています。
これらの URL は常に文字列 ../
で始まります。例:
../../widgets/foo common/foo-widget
これにより、http://example.com/svn/repos-1/widgets/foo
が C:\Working\common\foo-widget
に展開されます。
URL は、外部アイテムがディスクに書き込まれるディレクトリではなく、svn:externals
プロパティを持つディレクトリの URL に対して相対的であることに注意してください。
これらの URL は常に文字列 ^/
で始まります。例:
^/widgets/foo common/foo-widget
これにより、http://example.com/svn/repos-1/widgets/foo
が C:\Working\common\foo-widget
に展開されます。
同じ SVNParentPath
(いくつかのリポジトリを保持する共通ディレクトリ) を持つ他のリポジトリを簡単に参照できます。例えば
^/../repos-2/hammers/claw common/claw-hammer
これにより、http://example.com/svn/repos-2/hammers/claw
が C:\Working\common\claw-hammer
に展開されます。
文字列 //
で始まる URL は、URL のスキーム部分のみをコピーします。これは、ネットワークの場所に応じて異なるスキームで同じホスト名にアクセスする必要がある場合に役立ちます。例えば、イントラネット内のクライアントは http://
を使用し、外部クライアントは svn+ssh://
を使用します。例えば
//example.com/svn/repos-1/widgets/foo common/foo-widget
これにより、C:\Working
のチェックアウトに使用された方法に応じて、http://example.com/svn/repos-1/widgets/foo
または svn+ssh://example.com/svn/repos-1/widgets/foo
が展開されます。
文字列 /
で始まる URL は、URL のスキームとホスト名部分をコピーします。例:
/svn/repos-1/widgets/foo common/foo-widget
これにより、http://example.com/svn/repos-1/widgets/foo
が C:\Working\common\foo-widget
に展開されます。ただし、ワーキングコピーを別のサーバー svn+ssh://another.mirror.net/svn/repos-1/project1/trunk
からチェックアウトした場合、外部参照は svn+ssh://another.mirror.net/svn/repos-1/widgets/foo
を展開します。
必要に応じて、URL のペグリビジョンとオペレーティブリビジョンも指定できます。ペグリビジョンとオペレーティブリビジョンの詳細については、Subversion ブックの 対応する章 をお読みください。
上記の例のように、外部アイテムのターゲットフォルダーをサブフォルダーとして指定する場合は、中間の すべて のフォルダーもバージョン管理されていることを確認してください。したがって、上記の例では、common
フォルダーもバージョン管理する必要があります。
中間のフォルダーがバージョン管理されていない場合でも、ほとんどの場合、外部アイテムは正常に機能しますが、期待どおりに機能しない操作がいくつかあります。また、エクスプローラーのステータスオーバーレイアイコンも正しいステータスを表示しません。
TortoiseSVN がプロパティをどのように処理するかについての詳細が必要な場合は、「プロジェクト設定」というセクションをお読みください。
共通のサブプロジェクトにアクセスするさまざまな方法については、「共通のサブプロジェクトを含める」というセクションをお読みください。
Subversion 1.6 以降では、フォルダーと同じ構文を使用して、ワーキングコピーに単一の外部ファイルを追加できます。ただし、いくつかの制限事項があります。
ファイル外部アイテムへのパスは、svn:externals
プロパティを設定するフォルダーの直接の子である必要があります。
ファイル外部アイテムの URL は、ファイル外部アイテムが挿入される URL と同じリポジトリ内にある必要があります。リポジトリ間のファイル外部アイテムはサポートされていません。
ファイル外部アイテムは、多くの点で他のバージョン管理されたファイルと同様に動作しますが、通常のコマンドを使用して移動または削除することはできません。svn:externals
プロパティを代わりに変更する必要があります。
外部アイテムとして別のワーキングコピーに含めたいファイルまたはフォルダーのワーキングコピーが既にある場合は、Windows エクスプローラーからドラッグアンドドロップするだけでそれらを追加できます。
ファイルまたはフォルダーをあるワーキングコピーから、外部アイテムとして含めたい場所に 右ドラッグ するだけです。マウスボタンを離すと、コンテキストメニューが表示されます。コンテキストメニューエントリの をクリックすると、svn:externals
プロパティが自動的に追加されます。その後に行う必要があるのは、プロパティの変更をコミットし、更新して、これらの外部アイテムをワーキングコピーに適切に含めることだけです。