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

時に、作業コピーに別プロジェクト、おそらくライブラリのコードを含めたくなるでしょう。オリジナルの (そしてメンテナンスされる) コードとの関連が切れてしまうので、リポジトリにこのコードの複製を作りたくないでしょう。また、複数のプロジェクトでコアコードを共有したいかもしれません。これに対処する方法が少なくとも 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 の環境でのみ動作します。また、謎なファイルがどこにあるかチームが知るために、必要なドライブマッピングのドキュメントが必要です。厳密に言えばこの方法は、閉じた開発環境用です。一般的にはお勧めしません。