共通のサブプロジェクトを含める

作業コピーに別プロジェクト、たとえばライブラリのコードを含めたくなることがあると思います。実現する方法が少なくとも4つあります。

svn:externals の使用

プロジェクトにあるフォルダーに svn:externals プロパティをセットしてください。このプロパティは複数行からなります。各行には、共通コードをチェックアウトするフォルダーとして使用するサブフォルダー名と、そこにチェックアウトするリポジトリの URL を記述します。もっと詳しいことは 「外部項目」 をご覧ください。

新しいフォルダーをコミットしてください。そこで更新すると、Subversion は各リポジトリから作業コピーに、プロジェクトのコピーを取得します。必要なサブフォルダーは自動的に作成されます。メインの作業コピーを更新する度にも、全外部プロジェクトの最新版を取得します。

外部プロジェクトが同じリポジトリにある場合、メインプロジェクトの変更をコミットすると、変更がコミットリストに含まれます。

もし異なるリポジトリに存在する外部プロジェクトに変更を加えた場合、メインプロジェクトをコミットする際に外部プロジェクトに加えた変更も併せて表示されます。しかし、これらの外部プロジェクトへの変更は別々にコミットしなければなりません。

説明した3つの方法のうち、クライアント側でセットアップが必要ないものは1つだけです。一度フォルダープロパティに外部参照を設定すると、すべてのクライアントで、更新時に設定したフォルダーを取得します。

ネストした作業コピーの使用

プロジェクトに共通コードを格納する新しいフォルダーを作成してください。ですがまだ Subversion に追加しないでください。

新しいフォルダーで TortoiseSVNチェックアウト を選択し、共通コードのコピーをここにチェックアウトしてください。これで、メインの作業コピーの中に独立した作業コピーをネストさせます。

2つの作業コピーは独立しています。親作業コピーの変更をコミットした際には、ネストした作業コピーの変更は無視されます。同様に、親作業コピーを更新した際には、ネストした作業コピーは更新されません。

相対位置の使用

同じ共通コアコードを複数のプロジェクトで使用するが、使用するプロジェクトごとに複数の同じ作業コピーを維持したくなければ、使用するその他のプロジェクトと関連する、独立した場所にチェックアウトできます。例えば以下のようになります。

C:\Projects\Proj1
C:\Projects\Proj2
C:\Projects\Proj3
C:\Projects\Common

その上で、共通コードには相対パスで参照してください。例: ..\..\Common\DSPcore

プロジェクトが関係ない場所に散乱している場合、以下のバリエーションを使用できます。共通コードを一カ所に置き、その場所をプロジェクト内でハードコードしているものになるようドライブレター変換を使用します。例えば、共通コードを D:\Documents\FrameworkC:\Documents and Settings\{login}\My Documents\framework にチェックアウトし、

SUBST X: "D:\Documents\framework"

として自分のソースコード内で使用するドライブマッピングを作成してください。自分のコードでは絶対パスを指定できます。

#include "X:\superio\superio.h"

この方法は、全てが PC の環境でしか利用できません。また、必要なドライブマッピングを明文化しておかないと、チームはファイルがどこにあるか分からなくなってしまいます。はっきり言って、この方法は閉じた開発環境向けで、一般的にはお勧めできません。

プロジェクトをリポジトリに追加

最も簡単な方法は、単に自分のプロジェクトにおける作業コピーの中にサブフォルダーに追加することでしょう。しかし、この外部プロジェクトの更新やアップグレードを手作業で行わなければならないという欠点があります。

アップグレードしやすくするよう、 ToretoiseSVN にはエクスプローラーの右ドラッグコンテキストメニューのコマンドを用意しています。新しいバージョンの外部ライブラリを展開したフォルダーを、作業コピー内のフォルダーに右ドラッグして、コンテキストメニューSVN ここにあるベンダーブランチを更新を実行するだけです。これでコピー先のフォルダーに新しいファイルがコピーされます。自動的に新規ファイルは追加され、新しいバージョンで無くなったファイルは削除されます。