ファイルの共有および分岐、マージ機能

ファイルの共有

Visual SourceSafe にはプロジェクト間でファイルを共有する機能が装備されています。これはファイルをあたかも複数のプロジェクトに同時に存在しているようにする機能です。共有されているファイルの "マスター コピー" は Visual SourceSafe データベースの中に保管されていますが、そのファイルを共有しているどのプロジェクトからでも同じようにアクセスできます。あるプロジェクトの共有されているファイルに対して変更を加えると、そのファイルを共有しているすべてのプロジェクトにもその変更内容が即座に反映されます。この機能により、同じ修正を何度も加える手間がなくなり、使用ディスク容量も節約できます。

ファイルの共有の事例

ここでは、ファイル共有の利点を理解するため、以下の各事例について考えてみましょう。

  • 仕様書を共有するとき

    あるアプリケーションを開発しているプログラマのチームがいくつかあり、各チームはネットワーク接続された別の場所で作業しているとします。すべてのプログラマがいつでも同じ情報を参照できるように、プロジェクトの仕様書を最新の状態に保ち、いつでも参照できるようにしておく必要があります。

    この場合、それぞれのプロジェクトで必要な仕様書のファイルを Visual SourceSafe で共有しておけば、コメントや質問の追加など各プログラマによる仕様書への更新の内容を、すべてのプログラマにすばやく伝えることができます。

  • 複数のチームで 1 つのツール開発を行うとき

    ある開発チームが、各種のツールを開発するとします。各ツールの機能はそれぞれ異なりますが、扱うデータ形式は同じであるため、中心となるコード、モジュール、ヘッダー ファイルは共通のものを利用します。

    この場合には、各ツールを構成するファイルは、ツールごとに別個の Visual SourceSafe のプロジェクトで管理します。また、共通のファイルはプロジェクト間で共有し、変更を加えるとすべてのプロジェクトに直ちに変更内容が反映されるようにします。

  • 構成ファイルを部分的に共有するとき

    複数のローカライズ チームが、各国語向けアプリケーションを開発しているとします。どの言語用でもプログラムのベースとなるソース コードは同じですが、各国語ごとにヘルプやエラー メッセージで使用する文字列が異なるため、言語ごとに独自のリソース ファイルを持っています。

    この場合は、各ローカライズ チームはすべてのソース コードを共有し、各国語ごとに内容の異なるファイルは、それぞれ別個に管理します。つまり、ローカライズ チームは、共有ファイルとそうでないファイルの両方を扱うことになります。

  • 保守作業と次バージョンの開発作業を平行して進めるとき

    あるソフトウェア開発チームは、バージョン 2.0 の製品を出荷しました。この開発チームは、この後 2 つのチームに分かれます。一方のチームはバージョン 3.0 の開発に入り、もう一方のチームはバージョン 2.0 の保守作業に入ってバージョン 2.1 を出荷する予定です。

    この場合はプロジェクトを分岐させます。分岐直後の段階では、どちらの開発チームも同じファイルを使って作業を始めますが、それぞれの目的に応じて個別にファイルの更新や追加を行っていきます。したがって、分岐以降はそれぞれのファイルが別々の履歴を持つことになります。また、バージョン 2.1 の作業が終了した段階で必要な変更内容をバージョン 3.0 にマージすることが可能です。

  • 旧バージョンのファイルを使用して開発するとき

    ある開発者が、複数のバージョンがあるファイルを扱っています。このファイルはいくつかのプロジェクトで共有されています。その中のあるプロジェクトでは、最新の機能ではなく、旧バージョンの機能が必要です。

    特定の旧バージョンのファイルを使うためには、ファイルをそのバージョンに固定する必要があります。この場合には、ピンを設定するのが有効です。

**ファイルの共有

適切な権限を持つユーザーは、あるプロジェクトの任意のファイルを別のプロジェクトと共有できます。カレント バージョンのファイルをほかのプロジェクトと共有するには、Visual SourceSafe エクスプローラーの [ソース コード管理] メニューにある [共有] コマンドを使用します。ファイル リスト上のファイルをマウスで直接ドラッグしてほかのプロジェクトにドロップしても共有できます。ファイルを共有すると、右の図のように、共有されているファイル (RESOUECE.H) のアイコンは、1 枚の用紙の絵から何枚かの用紙が重なった絵に変わります。
microsoft visual sourcesafe
共有されたファイルに変更を加えると、そのファイルを共有しているほかのすべてのプロジェクトに変更内容が直ちに反映されるようになります。たとえば、データベース開発チームとスプレッドシート開発チームで、ワード プロセッサのリソース ファイルの一部が必要になったとします。右の図は、$/WordProcessor にのみ属していたリソース ファイル CORE1.CPP を、$/database と $/spreadsheet で共有した様子を示しています。この図からわかるように、CORE1.CPP は 1 つしか存在せず、これを 3 つのプロジェクトで共有しています。この場合、いずれかのプロジェクトでこの CORE1.CPP に変更を加えると、ほかの 2 つのプロジェクトにもその変更内容が反映されます。
microsoft visual sourcesafe

ピン設定による旧バージョンのファイルの共有

Visual SourceSafe には、ファイルを特定の旧バージョンに固定するピン機能があります。ピンの設定は分岐とは異なり、ファイルのコピーは作成されません。たとえば、ワード プロセシング チームが開発しているスペル チェッカーをスプレッドシート開発グループでも必要になったとします。ワード プロセシング チームは、さらに新バージョンを開発中していますが、現時点でスプレッドシート チームは、新バージョンに対応できないため旧バージョンのスペル チェッカー ファイルを採用することになりました。このような場合に、ピンの機能を使うと便利です。ピンを設定すると、あるプロジェクトの特定バージョンのファイルがほかのプロジェクトと共有されることになります。

 

microsoft visual sourcesafe

ファイルにピンを設定すると、Visual SourceSafe エクスプローラのファイル リストには、最新バージョンではなく、ピンを設定したバージョンのファイルが表示されます。ピンはどのファイルにも設定できますが、共有ファイルへの設定が最も有効です。共有ファイルにピンを設定すると、そのファイルに変更を加えることはできなくなります。
ファイルにピンを設定するには、Visual SourceSafe エクスプローラを使用します。ファイル リストで、ファイルを選択し、[ツール] メニューの [履歴の表示] を選択すると表示される [ファイルの履歴] ダイアログ ボックスでバージョンを選択して [ピン設定] をクリックします。

ピンを設定すると、[ファイルの履歴] ダイアログ ボックスと Visual SourceSafe エクスプローラで、そのファイルのアイコンがピン アイコンに変わり、そのファイルが特定バージョンに固定されたことが示されます。右の図 では NWIND.MDB のバージョン 1 にピン アイコンが表示されており、ピンがこのバージョンに設定されていることがわかります。 ピンを解除するには、やはり [ファイルの履歴] ダイアログ ボックスを使用します。ピン設定されているバージョンを選択すると [ピン設定] は [ピン解除] ボタンに変ります。この [ピン解除] ボタンをクリックするとピンが解除されます。

**共有ファイルの分岐
あるファイルまたはプロジェクトが、同時に 2 つの工程をたどるようにするプロセスを "分岐" と呼びます。分岐されたファイルやプロジェクトは、それぞれ異なる開発工程をたどることになります。Visual SourceSafe では、それぞれの開発工程を別個のプロジェクトにして分岐を管理することができます。それぞれの開発工程は、プロジェクト名により区別します。

この図は 典型的なファイルの分岐例です。CORE1.CPP は、$/WordProcessor、$/DataBase、$/SpreadSheet の 3 つのプロジェクトにより共有されていました。この 3 つのいずれかのプロジェクトで CORE1.CPP に変更を加えると、ほかの 2 つのプロジェクトにも変更内容が反映されるようになっていました。 スプレッドシート チームは、ある一定の段階で CORE1.CPP をほかの共有プロジェクトから分岐させ、このファイルに独自に変更を加えていくことになったとします。この場合、スプレッドシート チームは スプレッドシート プロジェクトとほかの 2 つのプロジェクト間の共有リンクを解除する必要があります。共有リンクを解除すると、スプレッドシート プロジェクトは独自のバージョンの CORE1.CPP を持つことになり、スプレッドシート チームが CORE1.CPP に変更を加えても、ほかのプロジェクトにはその変更内容は反映されません。逆に、ほかのプロジェクト チームが CORE1.CPP に変更を加えても、スプレッドシート プロジェクトの CORE1.CPP には変更内容は反映されません。あるファイルを複数のプロジェクトで共有しているときは、共有しているプロジェクトの数に関係なく、そのファイルは Visual SourceSafe 内にはただ 1 つしか存在しません。ところが、分岐を行うと、そのファイルは 2 つ存在することになります。分岐が行われる時点までは、そのファイルの共通の履歴が共有されていますが、分岐後は、共有リンクが解除されたプロジェクト間では異なる履歴が存在することになります。

ファイルの分岐は共有されているファイルが対象です。Visual SourceSafeでは、すでに共有されているファイルを分岐するだけでなく、共有と分岐を一度の操作で行うことが可能です。分岐を実行すると、次の処理が実行されます。

microsoft visual sourcesafe
  • 分岐を実行したプロジェクトに、分岐前とは独立した新バージョンのファイルが作成されます。
  • 分岐ファイルは、ほかのプロジェクトで共有されていたファイルとは独立した履歴を持ちます。
  • そのファイルを共有しているほかのプロジェクトとのリンクは解除され、カレント プロジェクトとの間に新しいリンクが作成されます。

**分岐ファイルのマージ

Visual SourceSafeでは、分岐したすべてのファイルでの作業が完了したときに、その変更内容を分岐元のプロジェクトにマージすることができます。
右の図は、分岐されていたファイルとプロジェクトのマージ後の関係を示しています。この図は、分岐された CORE1.CPP に $/SpreadSheet で行われた変更内容が、$/WordProcessor と $/SpreadSheet の CORE1.CPP にマージされたことを示しています。バージョン 5 の CORE1.CPP は、ほかの 2 つのプロジェクトとは独立して $/SpreadSheet に存在しています。したがって、$/SpreadSheet 内のファイルに対して、これ以降に加えた変更を反映させるためには、ファイルを再度共有するか、マージを行う必要があります。
マージを行うときは次の点に注意してください。

  • マージできるのはテキスト ファイルだけです。
  • マージするファイルどうしは、履歴のある時点で共通のバージョンを持つ必要があります。
  • マージは、一方向のみに行われます。ファイル A の変更内容がファイル B にのみ反映されます。
  • マージされた変更内容は、直ちにそのファイルを共有しているプロジェクトにも反映されます。

microsoft visual sourcesafe

自動的に行われるマージ

複数のユーザーが同時にチェックアウトしているファイルが同一プロジェクト内にあるか、または複数のプロジェクト間で共有されている場合は、チェックインするときに変更内容のマージが必要になります。複数のユーザーが同じファイルをチェックインすると、Visual SourceSafe により自動的にマージが実行されます。

たとえば、Satou と Suzuki という 2 人のユーザーが $/spreadsheet から CORE1.CPP をそれぞれチェックアウトし、各自の作業ディレクトリで編集を行っているとします。Satou は編集を先に終え、CORE1.CPP をチェックインします。Satou の行った変更は Visual SourceSafe データベースに保管されている CORE1.CPP に追加されます。次に、Suzuki が CORE1.CPP の編集を完了します。この時点では、Visual SourceSafe データベース内の CORE1.CPP には Satou が行った変更だけが保持されていますが、Suzuki が行った変更も Visual SourceSafe データベース内のCORE1.CPP に取り込む必要があります。Suzuki が CORE1.CPP をチェックインすると、Visual SourceSafe は、データベース内の CORE1.CPP が Suzuki のチェックアウトしたものとは異なるバージョンであることを認識します。Suzuki が変更を行った行と Satou が変更を行った行が異なる場合は、チェックインは問題なく実行されます。このとき、設定によっては、変更を CORE1.CPP にマージしたという内容のダイアログ ボックスが Suzuki に対して表示されます。一方、Suzuki と Satou が同じ行に変更を加えていた場合は、CORE1.CPP を編集してコンフリクトを解決する必要があるという内容のダイアログ ボックスが Suzuki に対して表示されます。CORE1.CPP が Suzuki の作業ディレクトリにコピーされ、そのファイルを編集しコンフリクトを解決してから、もう一度チェックインを行います。

[分岐ファイルのマージ] コマンド

ファイルを分岐して、複数のプロジェクトで並行して開発している場合、[分岐ファイルのマージ] コマンドを使えば、ファイルの複数のバージョンの変更内容をマージできます。たとえば、ある開発チームは $/WordProcessor というプロジェクトで、既にバージョン 2.0 をリリースしています。この開発チームは、この後 2 つのチームに分かれ、一方は次のバージョンの開発に入り、もう一方はバグの修正を行います。バグ修正チームは、$/WordProcessor のすべてのファイルを共有し、その後分岐させた $/WPmaintenance というプロジェクトで作業します。プロジェクト $/WordProcessor はバージョン 3.0 に向かって作業を進め、プロジェクト $/WPmaintenance はバージョン 2.1 に向かって作業を進めていきます。バージョン 2.1 の作業が完了した時点で、$/WPmaintenance のバグ修正をバージョン 3.0 の $/WordProcessor に取り込む必要があります。これには、[分岐ファイルのマージ] コマンドを使って、$/WPmaintenance の特定のファイルの変更内容を $/WordProcessor にマージします。この種のマージは必ず、ファイルに変更を加えたプロジェクトから、その変更を取り込むプロジェクトへの方向で行われます。

コンフリクトの解決

Visual SourceSafe がマージ処理中にコンフリクトを検出すると初期設定では ビジュアル マージ ダイアログ ボックスが表示されます。このダイアログ ボックスは、手動マージでも自動マージでも表示されます。
Cc844084.vss5-3(ja-jp,MSDN.10).gif

・ 上の 2 つのペインには、マージ対象の 2 つのバージョンが表示されます。左のペインには Visual SourceSafe 上のファイルが表示され、右のペインには作業フォルダ内のファイルが表示されます。分岐ファイルのマージでは、左右のペインにそれぞれ別のプロジェクトのファイルが表示されます。 ・ 下のペインには、マージ結果が表示されます。まず、競合しない変更内容のマージ結果が表示されます。このペインの表示内容は、作業の進行に伴って変化します。分岐ファイルをマージする場合は、分岐直前の元のファイルが表示されます。 上の 2 つのペインで編集することはできませんが、下のペインでは内容を編集できます。ファイルの変更状況がわかりやすく色分けして表示され、マウス操作だけで基本的なコンフリクトを解決できるようになっています。