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

時に、作業コピーに別プロジェクト、おそらくライブラリのコードを含めたくなるでしょう。オリジナルの(そしてメンテナンスされる)コードとの関連が切れてしまうので、リポジトリにこのコードの複製を作りたくないでしょう。また、複数のプロジェクトでコアコードを共有したいかもしれません。これに対処する方法が少なくとも3つあります。

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