ソース管理へのプロジェクトとファイルの追加
ここからは、Visual StudioのプロジェクトをSubversionのソース管理に追加する方法を見ていきます。前述のとおり、TortoiseSVNにはVisual Studioへの統合機能はなく、ディレクトリとファイルのレベルでソース管理が行われます。基本的には、ソース管理にはどんなファイルやディレクトリでも追加できます。つまり、どのアプリケーション用のファイルであっても、Subversionで管理できます。
まず、リポジトリの構造を決める必要があります。プロジェクトの数が多い場合は、きちんとグループ化できる構造の方がよいでしょう。私の場合、大抵は次のような構造にします。
Repository -- ProjectGroup1 (ie. Solution level) ----Project ----Project ----Project ----Project -- ProjectGroup2 (ie. Solution Level) ----Project ----Project
しかし、各自の好みに合わせて、別の構造にしても構いません。私の場合は、プロジェクトグループ/ソリューション用のフォルダを個別に作り、ソリューションファイルをそこに格納して、配下の複数プロジェクトを取りまとめる「大見出し」として使うようにしています。こうしないと、プロジェクトレベルのフォルダの収拾がつかなくなることが多いからです。
この記事では、次のようなフォルダ構造を使うことにします。
Repository -- SummaLp ---- SummaLpManager ---- SummaLpBusiness ---- SupportAssemblies
最上位フォルダの新規作成
TortoiseSVNでプロジェクトを作成するときには少々工夫が必要です。サーバにファイルやフォルダをインポートするのは簡単ですが、インポートした内容が、自動ではローカルにチェックアウトされません。しかも、インポートの完了後すぐにチェックアウトすることもできません。ソース管理の対象でない既存のファイルをTortoiseSVNで上書きすることはできないからです。こうしたことから、インポート機能は使わないのが1番です。代わりに、リポジトリに空のフォルダを作成してから、そのフォルダをチェックアウトし、ファイルやサブフォルダを手動で追加するという方法をとることにします。
ここでは、図2と図3に示すやり方で、「SummaLp」という最上位フォルダを作成します。


手順は次のとおりです。
- 右クリックし、[TortoiseSVN]を選択して、[Repo-browser.]を選択します。
- [Create Folder]を選択して、メインリポジトリの直下に新しい最上位フォルダを作成します。フォルダ名は「SummaLp」とします。
- エクスプローラに戻り、「SummaLp」フォルダに移動または作成します。
- このフォルダを右クリックし、[Checkout…]を選択します(図4を参照)。
- リポジトリの最上位フォルダを選択し、対応するローカルパスを指定します(図5を参照)。
![図4 ファイルのチェックアウト。ファイルをチェックアウトするには、メニューの[SVN Checkout…]を選択します。](http://cz-cdn.shoeisha.jp/static/images/article/3114/38974_figure04.jpg)

以上の手順で、ルートフォルダがソース管理の配下に置かれ、個々のファイルやサブフォルダを簡単に追加できる状態になりました。現時点では、実際にチェックアウトされたファイルはありません。指定のフォルダをSubversionで監視するよう指示しただけの段階です。エクスプローラに戻って、このフォルダを見てみると、アイコンに緑色のチェックマークが表示されています(図6を参照)。

配下のファイルやフォルダを一度にまとめてインポートしようと考えるのはやめましょう。前述のとおり、リポジトリでプロジェクトフォルダをまず作成してから、そのフォルダをソース管理の配下に置き、個々のファイルを追加する方がずっと簡単です。
いずれかのプロジェクトフォルダを選択し、先ほどと同様の手順でフォルダの作成を進めます。
- TortoiseSVNでリポジトリを参照します。
- 「SummaLp」フォルダの下にサブフォルダを作成し、プロジェクトの名前「SummaLpManager」を付けます。
- エクスプローラで、対応するフォルダにチェックアウトします。これで、プロジェクトフォルダがソース管理の配下に置かれます。
- ファイルとフォルダを選択し、右クリックメニューから[Add]を実行します(図7を参照)。
![図7 ファイルの追加。メニュー項目の[Add]を使用して、ソース管理とリポジトリにローカルからファイルを追加できます](http://cz-cdn.shoeisha.jp/static/images/article/3114/38974_figure07.jpg)
追加する項目はよく吟味します。場合によっては、サブフォルダ全体ではなくファイルを個別に追加する方がよいでしょう。「obj」フォルダや、「notes」、「suo」、「.user」の各ファイル、ログファイルなど、管理の対象から外した方がよさそうなものは省略しましょう。
ファイルを追加し終えた後でフォルダを見てみると、各ファイルのアイコンにプラス記号が付いているはずです。この記号は、ローカルストアに追加しただけのファイルを表します。まだサーバと同期していないという意味です。
サーバと同期するには、プロジェクトフォルダを右クリックし、[SVN Commit]を選択します(図8を参照)。
![図8 変更または追加したファイルのコミット。変更または追加したファイルをリポジトリにコミットするには、[SVN Commit]を使用します](http://cz-cdn.shoeisha.jp/static/images/article/3114/38974_figure08.jpg)
コミットとは、簡単に言えば、ローカルで加えたすべての変更をサーバに同期することを指します。今回のケースで言えば、新しく追加したファイルをサーバにコピーし、リポジトリに格納するということです。ファイルの修正を自動でマージできないなど、競合がある場合には、更新全体が失敗し、エラーとなります。コミットの処理の可否は、いわば連帯責任です。競合が生じるファイルが1つでもあれば、コミットは行われません。その場合、競合を解決しないとチェックインはできません。
コミットが完了すると、ローカルコピーは最新の状態となります(図9を参照)。これで、リポジトリの同期がとれました。

この段階では、リポジトリが保持するファイルと、ローカルフォルダに置かれた作業用ファイルとが一致しています。図10はリポジトリブラウザの表示の様子です。これ以外のプロジェクトフォルダについても、上記と同じ手順をそれぞれ繰り返してください。

ソリューションファイルもソース管理に追加しておきましょう。まだチェックインしていない場合は、[Add]をクリックして追加し、[Commit]をクリックしてコミットします。他のパスとの相対位置を考えて、ソリューションファイルはルート階層(この例では「SummaLP」)に入れるのがよいでしょう。
以上で、リポジトリの準備が完了し、共有して使える状態になりました。新しい階層を作成して新しいファイルをリポジトリに追加する大まかな手順をまとめると、次のようになります。
- リポジトリに空のフォルダを作成する。
- そのままローカルフォルダにチェックアウトする。
- TortoiseSVNを使ってエクスプローラでファイルを追加する。
- 変更をコミットする。
リポジトリからローカルにファイルのコピーを取得
ここまで説明した手順は、最初にリポジトリを作成するときに1回だけ必要な操作でした。一方、開発者がリポジトリに接続して最新リビジョンのコピーを初めてローカルマシンに取得するときの操作はずっと簡単です。
- ローカルコピーの格納場所となるフォルダを決めます。
- 右クリックし、[SVN Checkout]を選択します(図4を参照)。
- リポジトリを開き、リポジトリ内のプロジェクトフォルダと、チェックアウトしたファイルを取得するローカルフォルダのパスを指定します。本記事の例では、最上位フォルダの「SummaLp」を選択します。これで[Checkout]を選択すれば、プロジェクト全体とソリューションファイルを取得できます。
