作業コピーに別プロジェクト、たとえばライブラリのコードを含めたくなることがあると思います。実現する方法が少なくとも4つあります。
プロジェクトにあるフォルダーに svn:externals
プロパティをセットしてください。このプロパティは複数行からなります。各行には、共通コードをチェックアウトするフォルダーとして使用するサブフォルダー名と、そこにチェックアウトするリポジトリの URL を記述します。もっと詳しいことは 「外部項目」 をご覧ください。
新しいフォルダーをコミットしてください。そこで更新すると、Subversion は各リポジトリから作業コピーに、プロジェクトのコピーを取得します。必要なサブフォルダーは自動的に作成されます。メインの作業コピーを更新する度にも、全外部プロジェクトの最新版を取得します。
外部プロジェクトが同じリポジトリにある場合、メインプロジェクトの変更をコミットすると、変更がコミットリストに含まれます。
もし異なるリポジトリに存在する外部プロジェクトに変更を加えた場合、メインプロジェクトをコミットする際に外部プロジェクトに加えた変更も併せて表示されます。しかし、これらの外部プロジェクトへの変更は別々にコミットしなければなりません。
説明した3つの方法のうち、クライアント側でセットアップが必要ないものは1つだけです。一度フォルダープロパティに外部参照を設定すると、すべてのクライアントで、更新時に設定したフォルダーを取得します。
プロジェクトに共通コードを格納する新しいフォルダーを作成してください。ですがまだ Subversion に追加しないでください。
新しいフォルダーで
→ を選択し、共通コードのコピーをここにチェックアウトしてください。これで、メインの作業コピーの中に独立した作業コピーをネストさせます。2つの作業コピーは独立しています。親作業コピーの変更をコミットした際には、ネストした作業コピーの変更は無視されます。同様に、親作業コピーを更新した際には、ネストした作業コピーは更新されません。
同じ共通コアコードを複数のプロジェクトで使用するが、使用するプロジェクトごとに複数の同じ作業コピーを維持したくなければ、使用するその他のプロジェクトと関連する、独立した場所にチェックアウトできます。例えば以下のようになります。
C:\Projects\Proj1 C:\Projects\Proj2 C:\Projects\Proj3 C:\Projects\Common
その上で、共通コードには相対パスで参照してください。例: ..\..\Common\DSPcore
プロジェクトが関係ない場所に散乱している場合、以下のバリエーションを使用できます。共通コードを一カ所に置き、その場所をプロジェクト内でハードコードしているものになるようドライブレター変換を使用します。例えば、共通コードを D:\Documents\Framework
か C:\Documents and Settings\{login}\My Documents\framework
にチェックアウトし、
SUBST X: "D:\Documents\framework"
として自分のソースコード内で使用するドライブマッピングを作成してください。自分のコードでは絶対パスを指定できます。
#include "X:\superio\superio.h"
この方法は、全てが PC の環境でしか利用できません。また、必要なドライブマッピングを明文化しておかないと、チームはファイルがどこにあるか分からなくなってしまいます。はっきり言って、この方法は閉じた開発環境向けで、一般的にはお勧めできません。
最も簡単な方法は、単に自分のプロジェクトにおける作業コピーの中にサブフォルダーに追加することでしょう。しかし、この外部プロジェクトの更新やアップグレードを手作業で行わなければならないという欠点があります。
アップグレードしやすくするよう、 ToretoiseSVN にはエクスプローラーの右ドラッグコンテキストメニューのコマンドを用意しています。新しいバージョンの外部ライブラリを展開したフォルダーを、作業コピー内のフォルダーに右ドラッグして、
→ を実行するだけです。これでコピー先のフォルダーに新しいファイルがコピーされます。自動的に新規ファイルは追加され、新しいバージョンで無くなったファイルは削除されます。