次の方法で共有



August 2016

Volume 31 Number 8

DevOps - Git へのコミット: Visual Studio 2015 におけるソース管理

Jonathan Waldman | August 2016

Visual Studio と Team Foundation Server では、2013 年のリリース以降、Git に対する組み込みへのサポートが提供されています。Git とは、これまでのオプションの多くを覆す、非常に人気のあるソース管理システムです。このソース管理オプションを補完するために、マイクロソフトは Git 用の機能豊富なフロントエンド ツールを Visual Studio に追加しています。では、このようなツールを入手して使用するには、どうすればよいでしょう。

今回は、Team Foundation Server (TFS) (旧称 Team Foundation バージョン管理 (TFVC)) に関連するソース管理テクノロジと Git の相違点を取り上げます。その後、Git の構成方法、ローカル リポジトリの作成、接続、および操作方法 (変更のステージングとコミット方法など)、分岐の管理方法 (履歴のマージと閲覧など)、およびさまざまなリモート リポジトリの接続方法 (変更の同期方法など) に踏み込んでいきます。

ここに掲載している図は Visual Studio 2015 Update 2 Enterprise エディションで作成しましたが、ここで説明する項目は、Community エディションや Express エディションなど、他の Visual Studio 2015 エディションでも利用できます。スペースを節約するために、図に複数の画面イメージを含めている場合があります。その場合は、そのことを本文に明記します。また、図の中で注目する項目を示すために、番号付きのマーカーを使用しています。図に言及するときは、基本的にこのマーカー部分だけを説明します。たとえば、文に「図 1 のマーカー 1 を参照した後、マーカー 2 を参照してください」と記載している場合、マーカー 2 は図 1 にあることを意味しています。

チーム エクスプローラー ウィンドウのホーム パネル (オフライン)
図 1 チーム エクスプローラー ウィンドウのホーム パネル (オフライン)

概要

Visual Studio を数年以上使用していると、チーム環境でソリューションを開発するときの適切な選択肢は TFVC であるという印象をお持ちかもしれません。多くの場合、それは正しい印象です。プロジェクトで既に TFVC を使用している場合や、(ユーザーがネットワーク間で何を合理的にストリーミングする/できる以上に) プロジェクトで非常にサイズの大きいファイルを保存したり、多数のファイルを含めたりする必要がある場合、またはソース管理下でファイルをロックする必要がある場合は特に当てはまります。しかし、開発者が 1 つの共同ソフトウェア プロジェクトに参加しながらも、多様なリモートの場所から作業するのがさらに一般的になるにつれ、新しい開発チームが Git に集まるようになっています。というのも、Git は分散型のバージョン管理システムであり、変更のコミットと取り消し、分岐の管理、履歴へのアクセスなどをオフラインで生産的に行えるという明確なクロスプラットフォームの魅力を備えているからです。何より、準備が整ったら、オンラインにして他のチーム メンバーが更新しているのと同じリモート リポジトリに接続し、自分がオフライン時に行った変更をさまざまな方法で同期できます。

Visual Studio 2015 IDE は、LibGit2 API と LibGit2Sharp 通信レイヤーを使用して、フロントエンド ツールで公開する Git 機能のすべてを実装しています。LibGit2 は、完全に C 言語で作成された、依存関係のない、クロスプラットフォームのオープン ソース Git コア エンジンです。LibGit2Sharp は、C# 言語で作成され、Microsoft .NET Framework のマネージ プロセスとして実行されるライブラリです。LibGit2 API は、Visual Studio と LibGit2 の間で .NET 対応インターフェイスとして機能し、Visual Studio チームが LibGit2 ライブラリとの通信パイプラインを確立するために必要なプログラミング作業を大幅に簡素化します。LibGit2Sharp も利用できます。したがって、お好みの .NET 言語を使用して独自の Git ツールやユーティリティを作成できます。LibGit2 と LibGit2Sharp の詳細については、libgit2.github.com (英語) を参照してください。

Visual Studio では、チーム エクスプローラーは、基盤となる Git エンジンである LibGit2 と最終的にやり取りするのに使用する主要 GUI です。チーム エクスプローラーを開くには、[表示]、[チーム エクスプローラー] の順にクリックするか、Ctrl キーと \ キーを同時に押した後、Ctrl キーと M キーを同時に押します。チーム エクスプローラー ウィンドウの上部にはツール バーがあり、青の戻る/進むボタン、白のホーム ボタン、緑の接続ボタン、青の更新ボタンが並んでいます。ホーム ボタンをクリックすると、図 1 に示すようなウィンドウが表示されます。

ツール バーの下には、"ホーム" というラベルがあります (マーカー 1)。このラベルの隣には、白の下向きの矢印があります (マーカー 2)。これは、ラベルがドロップダウン メニューに結び付いていることを示しています。ラベルの任意の場所をクリックすると、メニューが表示されます (マーカー 4)。チーム エクスプローラー ツール バーとこのコンテキスト メニューの両方で、チーム エクスプローラーのさまざまなパネルを便利に切り替えることができます。これは、タブ付きのダイアログのようなものを別の形で実現しています。 現在表示しているパネルの種類 (この場合はホーム パネル) は、パネル ラベル (マーカー 1) とチーム エクスプローラーのタイトル バー キャプション (マーカー 3) の両方に表示されます。

Git を構成する

Visual Studio で Git を使用する前に、グローバル設定を構成する必要があります。そのためには、チーム エクスプローラーのホーム パネルに移動します。[プロジェクト] セクションには、保留中の変更の表示、分岐の管理、リモート リポジトリとの同期などを行うための一連のボタンがあります (図 1、マーカー 5)。[設定] をクリックして設定パネルを開き、[Git] セクションの下の [グローバル設定] をクリックします。これで、Git 設定パネルが表示されます (図 2、マーカー 1)。これらのグローバル設定は、特定の Git リポジトリには関連付けられていません。もっと言えば、これは新しいリポジトリを作成するときに既定で設定される値です (この既定値はリポジトリごとに後からオーバーライドできます)。ユーザー名 (フル ネーム、空白可)、電子メール アドレス、および既定のリポジトリ場所を指定します。既定のリポジトリ場所は、Visual Studio で新しく作成する Git リポジトリを保存する既定のフォルダーです (マーカー 2)。

チーム エクスプローラーの Git 設定パネル
図 2 チーム エクスプローラーの Git 設定パネル

また、TFS または Gravatar の作成者イメージを Git アクティビティに関連付けるかどうかも指定します。Gravatar を選択する場合は、この機能が各 Git のコミットに関連する電子メール アドレスをルックアップ キーとして Gravatar に送信するしくみになっていることに注意してください。Gravatar は電子メール アドレスに関連付けられたイメージを返します。このようにして、最終的に、この一見無害な機能によってチーム全員の連絡先情報がサードパーティと共有されます。このような事態は避けたいのではないでしょうか。最後に、既定でマージ後に変更をコミットするかどうかを選択します (マーカー 3)。これらのフィールドに変更を加える場合は、[更新] をクリックします(マーカー 4)。

パネルの別のセクションでは、使用する差分ツールとマージ ツールを設定できます。現在、これらの値は Visual Studio の独自のツールを使用するという既定値に設定されています。この選択肢をさらにカスタマイズする場合は、Windows によって書き込まれるこの構成ファイルを手動で編集する必要が生じる可能性があります。その構成ファイルは .gitconfig という拡張子を持ち、homepath フォルダーにあります。

ローカル リポジトリを操作する

1 人で独自プロジェクトの開発に取り組んでいながら、コードをソース管理下に置くという賢明な判断をした場合、ローカル Git リポジトリに対してオフラインで操作を始めて、必要な場合には、リモート リポジトリに後から接続してスケールアップすることができます。

空のリポジトリを作成するには、チーム エクスプローラーの接続パネル (図 3、マーカー 1) に移動して、[ローカル Git リポジトリ] の下の [新規] をクリックします (マーカー 2。[新規] はクリック済みのため淡色表示されています)。既定のソース パスの後に「\MyNewestRepo」と続けるなどして、ローカル パスとリポジトリ名を入力し (マーカー 3)、[作成 ](マーカー 4) をクリックします。これで、.git フォルダーと 2 つのファイル (.gitignore と .gitattributes) を含む MyNewestRepo というフォルダーが作成されます (これが作業ディレクトリになります)。これを画面イメージに示していますが、.git は隠しフォルダーです。 このフォルダーは、実際の Git リポジトリ (Git のバッキング データベースとハウスキーピング ファイル) を含んでおり、通常触れてはいけません。しかし、Git リポジトリ全体を含んでいるので、このフォルダーのバックアップが必要になることがあります。そのため、このフォルダーの存在を把握しておくことは重要です。.gitattributes ファイルは、Git での行末の処理方法、および現在のリポジトリ内のファイルを比較するときに起動するプログラムを指定します。.gitignore ファイルは、Git で特定の拡張子のファイルや特定のフォルダーにあるファイルを追跡しないことを指定します (既定では、.suo、.user、.pdb、.tmp のファイル拡張子と、デバッグ フォルダーとリリース フォルダーのすべてのファイルが指定されています)。Git リポジトリのサイズをできる限り小さく保つには、他のファイル拡張子とフォルダーを必要に応じて追加します。

チーム エクスプローラーの接続パネル
図 3 チーム エクスプローラーの接続パネル

新しいリポジトリを作成すると、[ローカル Git リポジトリ] セクションの下にリポジトリが表示されます。リポジトリに接続するには、一覧に表示されるリポジトリをダブルクリックします (図 3、マーカー 6)。すると、そのリポジトリが太字フォントで強調表示された後、ホーム パネルに移動します。これで、選択したリポジトリに正常に接続したことが立証されます (図 4、マーカー 2)。

チーム エクスプローラーのホーム パネル (リポジトリに接続済み)
図 4 チーム エクスプローラーのホーム パネル (リポジトリに接続済み)

ここで [設定] をクリックすると、リポジトリ固有の設定にアクセスできることがわかります。Git のグローバル設定から継承された値をオーバーライドする場合には、これらの設定にアクセスします。たとえば、特定のクライアントのプロジェクトに取り組んでいて、仕事専用の電子メール アドレスを使用する必要がある場合、現在のリポジトリの電子メール アドレスをカスタマイズするのが非常に一般的です。さらに、用意されているリンクをクリックして .gitignore ファイルと .gitattribute ファイルを直接編集できるほか、使用する差分ツールとマージ ツールの指定、リモートの追加、および現在のリポジトリに関連する他の属性を表示できます。

Git の作業ディレクトリは、.git ディレクトリを含む親フォルダーであることを思い出してください。空のリポジトリを作成して構成した後、そこにファイルを追加するには、まず、作業ディレクトリにファイルを追加します。Git はそのファイルを認識しますが、開発者がステージングしてコミットするまでファイルが Git リポジトリに統合されることはありません。この知識を活用し、準備ができたら、必要に応じて、Git コミット ワークフローに取り組むときに作業ファイルを使用してください。

空のリポジトリから始めてファイルを追加するのが 1 つの選択肢ですが、ソリューション ファイルから始めることもできます。新しいソリューションと共に Git リポジトリを作成するには、[ファイル]、[新しいプロジェクト] の順にクリックします。[新しい Git リポジトリの作成] チェック ボックスのある [新しいプロジェクト] ダイアログが表示されます。このチェック ボックスをオンにすると、Visual Studio によって、新しいプロジェクトの作業ディレクトリに新しいソリューションと新しい Git リポジトリ (.gitattributes と .gitignore の 2 つの構成ファイルを含む) が作成されます。または、既存のソリューションがあり、それを Git ソース管理下に置く場合には、ソリューションを開き、[ファイル]、[ソース管理に追加] を順にクリックします。どちらの手順でも、新しい Git リポジトリと .gitattributes と .gitignore 構成ファイルが作成されます。

Git ソース管理下にあるソリューションを開くと、Visual Studio は自動的にソリューションの作業フォルダーにあるリポジトリに接続します。同様に、チーム エクスプローラーの接続パネルを使用して既存のリポジトリに接続する場合は、Visual Studio ではリポジトリの作業ディレクトリにあるフォルダーすべてを動的にスキャンして .sln ファイルを検出し、それらをホーム パネルの [ソリューション] セクションに一覧表示します。たとえば、MyNewestRepo リポジトリに接続する場合、図 4、マーカー 4 に示す吹き出しイメージのようなソリューションの一覧が表示されるでしょう。Visual Studio によってリポジトリに関連するこのようなソリューションが特定され、そのソリューションを Visual Studio 内で開く場合には、ソリューションのエントリをダブルクリックします。

変更を加える

Visual Studio で Git ソース管理下にあるソリューションを開くと、ソリューション エクスプローラーでは、ツリービュー コントロールの項目の隣に参考になるアイコンが表示されます。このアイコンは、作業ディレクトリ内の項目の状態を、現在接続している Git リポジトリに存在している項目と比較して示すものです。たとえば、図 5 では、チェックイン済みの項目の隣には青い鍵のアイコン (マーカー 1)、変更されている項目の隣には赤いチェック マーク (マーカー 2)、追加された項目には緑のプラス記号 (マーカー 3) が表示されます。知らないアイコンが表示されている場合は、アイコンを直接マウスでポイントすると、参考になるヒントが表示されます。通常、これらのアイコンは正確ですが、Visual Studio IDE の外で項目に変更を加えた場合は、ソリューション エクスプローラーのツール バーにある更新ボタンをクリックして表示を更新する必要が生じることがあります。

ソース管理の状態を示すアイコンが表示されているソリューション エクスプローラー
図 5 ソース管理の状態を示すアイコンが表示されているソリューション エクスプローラー

ソリューションに含まれる項目を操作した後は、おそらく、変更をステージングして Git リポジトリにコミットするか、場合によってはいくつかの変更を取り消す必要があります。加えた変更の管理を始めるには、[チーム エクスプローラー]、[ホーム]、[変更] の順に移動します。変更パネル (図 6、マーカー 1) に、検出されたすべての変更が表示されます (マーカー 2)。変更した項目すべてをステージングするにはプラス記号アイコン (マーカー 12) をクリックます。また、すべての項目のステージングを解除するにはマイナス記号アイコン (マーカー 13) をクリックします。[変更] (マーカー 2) と [段階的な変更] (マーカー 3) セクションの間で項目をドラッグ アンド ドロップすることもできます。

チーム エクスプローラーの変更パネル
図 6 チーム エクスプローラーの変更パネル

変更した項目を右クリックすると、コンテキスト メニューが表示されます。コンテキスト メニューでは、ファイルを開く、履歴を表示する、変更前のバージョンと比較する、ソース ファイルを開いて参考になる注釈ペインを隣に表示する、変更をステージングする、および変更を取り消すことができます (マーカー 14)。変更前のバージョンのファイルと変更を比較する場合は、変更した項目をダブルクリックして差分ウィンドウ (図 7) を開きます。差分ウィンドウには 2 つのペインがあります。 左側のペインにはローカル Git リポジトリにある変更前のバージョンが表示され、右側のペインには作業ディレクトリにあるバージョンが表示されます。右端には、ファイル間で違いのある場所が視覚的に示されます (マーカー 1)。赤は削除を示し、緑は追加を示します。ペインでは、コード行で何かが削除された場合は、そのコード行全体が赤で強調表示されます (マーカー 2)。コード行に何かが追加された場合は、コード行全体が緑で強調表示されます (マーカー 3)。また、その行で削除または追加されたテキストの周囲には、赤または緑のボックスが表示されます。さらに、各ペインの上部には、便利なドロップダウンがあります (マーカー 4)。これを使用すると、すばやくコード セクションに移動できます。

Visual Studio の既定の差分ツール
図 7 Visual Studio の既定の差分ツール

変更をコミットする準備ができたら、コミット メッセージ (図 6、マーカー 4) を追加してから、マルチモード コミット ボタン (マーカー 5) をクリックします。このマルチモード ボタンは既定で [コミットしてステージング] に設定されていますが、プッシュや同期もできます (プッシュや同期に意味があるのは、リモート リポジトリに接続している場合のみです)。コミット操作が成功すると、チーム エクスプローラーにコミット ID が報告されます (マーカー 15)。

変更パネルには、unit_test_project というローカル分岐を操作していることが表示されます (図 6、マーカー 6)。Visual Studio のステータス バーには、操作中の分岐 (マーカー 10) が示されている他にも、現在の Git リポジトリに関連した役立つリアルタイム情報が表示されます。たとえば、未発行の変更の数 (リモート リポジトリにプッシュされていない変更の数、マーカー 7)、ステージングされた変更の数 (マーカー 8)、現在のリポジトリの名前 (マーカー 9)、および現在の分岐の名前 (マーカー 10) です。さらに、これらのステータス バーのセクションはボタンのように動作します。たとえば、現在のリポジトリをクリックすると、Visual Studio でチーム エクスプローラーの接続パネルが開き、現在のリポジトリに関する詳細が表示されます。現在の分岐をクリックすると、分岐オプションがポップアップ メニューとして提供されます。 

他のソース管理システムと同様、リポジトリに変更をコミットすると、リポジトリにコミット履歴が追加されます。この履歴エントリには、Git 設定で指定したユーザー名と電子メール アドレスが含まれるため、履歴データにアクセスできる人ならだれでも、だれが「何を」、「いつ」行ったかを見ることができます。 それだけでなく、ローカルの変更をリモート リポジトリにプッシュする場合には、変更と一緒に履歴もプッシュされます。チームの他のメンバーがローカル リポジトリをリモートと同期する場合、この変更で生じた履歴を表示できるようになります。

分岐を管理する

Visual Studio は、Git 分岐の基礎的な機能と高度な機能をサポートしています。分岐を管理するには、[チーム エクスプローラー]、[ホーム]、[分岐] の順に移動して、分岐パネルを開きます (図 8、マーカー 1)。上部には、マージ、再ベース、および他のアクションへのクイック リンクがあります (マーカー 2)。その下には、[アクティブな Git リポジトリ] セクション (マーカー 3) と、各リポジトリに含まれる分岐の一覧があります。現在の分岐は太字で表示されます (マーカー 4)。別の分岐に切り替えるには、切り替える先の分岐をダブルクリックします。すると、Visual Studio によって、選択された分岐でチェックアウトが行われます。

チーム エクスプローラーの分岐パネル
図 8 チーム エクスプローラーの分岐パネル

特定の分岐を右クリックすると、実行可能な操作のメニューが表示されます (マーカー 5)。選択した分岐をチェックアウトする、既存のローカル分岐から新しいローカル分岐を作成する、既存のローカル分岐から選択した分岐にマージする、選択したローカル分岐を別の既存のローカル分岐に再ベースする、選択した分岐で hard リセットや mixed リセットを実行する、選択した分岐をチェリーピックする、現在の分岐を削除するなどが可能です。マージを選択する場合、Visual Studio によってマージ競合の検出が完全にサポートされます。競合エディターが提供されるので、それを使用して競合を手動で解決できます。

また、一覧表示された任意の分岐の履歴を表示できます。その履歴ビューでエントリを右クリックすると、コミット詳細の表示、新しい分岐の作成、タグの作成、元に戻す、リセット、チェリーピック、親/子分岐への移動などができるメニューが表示されます。履歴ビューには、コミット ID、作成者、日付、およびコミット メッセージが表示されます。

リモート リポジトリに接続する

ここまでは、ローカル Git リポジトリに対してオフラインで作業する内容に限っていました。一般的に、単独で作業していて、作業ディレクトリの .git フォルダーをバックアップする信頼できる方法を用意していれば、ローカル リポジトリだけで十分です。しかし、チーム プロジェクトで他の開発者と共同作業する場合や、ホストされるサービスをバックアップとして使用する場合には、リモート リポジトリに接続する必要があります。

リポジトリを完全に管理する必要がある場合や、ホストされたサーバーに次の世界的なキラー アプリのコードを置くのに少し抵抗がある場合は、ファイル共有を使用して自分が所有するネットワークでリポジトリをホストすることを検討してください。次に、Windows ベースの Git サーバーをインストールすると、信頼性とリポジトリとのファイルの転送速度を向上できます。そのようなサーバーには、Bonobo Git Server (無料。bonobogitserver.com、英語) や、GitStack (2 ユーザーまで無料。gitstack.com、英語) があります。次に、Visual Studio Team Foundation Server Express 2015 をダウンロードしてネットワーク上のサーバーにインストールし、最大 5 人のユーザーを指名して無料でサポートできます。または、自分かチームのメンバーがアクティブな MSDN ライセンスを所有している場合は、完全版の Visual Studio Team Foundation Server 2015 をダウンロードしてサーバーにインストールし、永続的に保有することができます。これも、最大 5 人のユーザーを指名して無料でサポートできます。最後に、Visual Studio Team Foundation Server 2015 と、チームに必要なクライアント アクセス ライセンス (CAL) を一緒に購入してインストールできます。

オフサイト Git ホスティング サービスを使用する意思があり、使用できる場合には、選択肢が Visual Studio Team Services (旧称 Visual Studio Online) や人気のGitHub、BitBucket、GitLab などにも広がります。無料ホスティング オプションには必ずいくつかの制限があります。Git wiki Web サイト (bit.ly/1Oym3F9、英語) では、さまざまな Git ホスティング オプションと機能についての情報を最新に保つ取り組みが行われています。

リモートに接続して、リモートでホストするリポジトリを複製する方法として、まずネットワーク上のどこかでホストされているリポジトリを複製する方法を説明します。次に、Web でホストされている単純な Visual Studio Team Services リポジトリに接続して複製する方法を説明します。最後に、GitHub でホストされた有名なプロジェクトのリポジトリに接続して複製する方法を説明します。

リモートで管理するには、[チーム エクスプローラー]、[ホーム]、[接続] の順に移動します (図 9、マーカー 1)。接続パネルでは、パネル メニュー (マーカー 2) の下に青い [接続の管理] リンクが表示されます。その下には、ホストされるサービスのプロバイダーを縦並びに一覧したセクションが表示されます ([Visual Studio Team Services] ウィンドウと [GitHub] ウィンドウはそれぞれ「サービスの招待」と呼ばれます)。

チーム エクスプローラーの接続パネルに表示されるサービス プロバイダー オプション
図 9 チーム エクスプローラーの接続パネルに表示されるサービス プロバイダー オプション

サービスの招待を閉じた (マーカー 3 で示した [X] をクリックした) 場合は、レジストリを変更しない限り再度表示することはできません。この場合、代わりに [接続の管理] ドロップダウン メニュー (マーカー 4) を使用してサービスにアクセスできます。チーム エクスプローラーの接続パネルに含まれる他の情報 (最近使用した Git リポジトリ情報など) もレジストリに保存されます。そのレジストリ キーを検査する場合は、HKCU\Software\Microsoft\VisualStudio\14.0\TeamFoundation で確認できます (その下の GitSourceControl 分岐と TeamExplorer 分岐に注目してください)。

Git リポジトリに対してオフラインで生産性の高い作業を実行できる理由の 1 つは、リモート リポジトリをローカル リポジトリに複製すると、すべてのコミット、分岐、マージ操作の詳細を含む、リポジトリの履歴全体を取得できることにあります。オンラインに戻ると、Git では、リモート リポジトリと比較して、ローカル リポジトリにどのような変更が加えられたかが判断されます。これは、フェッチ、プル、プッシュ、および同期操作を正常に実行するうえで重要です。

ローカル ネットワーク共有からリポジトリを複製するには、[ローカル Git リポジトリ] セクションに移動して [複製] リンクをクリックします。「複製する Git リポジトリの URL を入力してください」というメッセージが表示されますが、このプロセスは実際にはかなり寛容です。現在のワークステーションの場所を示す任意の有効なパス (c:\­Repos\FinancialWizardApp など)、ネットワーク共有への UNC パス (\\1.2.3.4\Repos\FinancialWizardApp)、またはネットワークンに割り当てられたドライブのパス (\\computername\Repos\FinancialWizardApp) を入力してもかまいません。ただし、指定した場所に .git フォルダーがあり、それを Visual Studio が読み取れることを確認してください。

図 10 (マーカー 1) では、リモート リポジトリを含むネットワーク上の場所を参照するために、ネットワークに割り当てられたドライブ文字を入力しています。ネットワーク上で作業する他の開発者も同じことが可能です。リモート リポジトリの場所を指定したら、複製されたリポジトリのローカル パスを指定します (マーカー 2)。次に、サブモジュールを再帰的に複製するかどうかを決定して、[複製] をクリックします。

さまざまな場所のリモート リポジトリを操作する
図 10 さまざまな場所のリモート リポジトリを操作する

重要なのは、ファイル サーバー上のリモート リポジトリに接続する場合、プル要求を発行できないことです。この機能を使用するには、Git サーバー (Team Foundation Server、GitHub など) が必要です。ただし、分岐の作成、マージ、管理、履歴の表示、変更の同期 (フェッチ、プル、プッシュ) は可能です。

Visual Studio Team Services のリポジトリを複製する場合は、まず Team Foundation Server にログオンする必要があります。初めに、Visual Studio の [チーム]、[接続の管理] を順にクリックするか、チーム エクスプローラーの接続パネルに移動して [接続の管理] をクリックし、[チーム プロジェクトへの接続] をクリックします。[Team Foundation Server への接続] ダイアログが表示されます。[サーバー] をクリックすると、図 10、マーカー 4 に示すようなダイアログが表示されます。このダイアログを使用して利用可能な Team Foundation Server に接続できますが、Visual Studio Team Services アカウントに接続する必要がある場合は、その URL を入力します。[OK] をクリックすると、サインインを求められます。サインインすると、サーバーが一覧に表示されます。これで、ダイアログを閉じてかまいません。次に、2 つのペインのあるダイアログが表示されます。左側のペインはチーム プロジェクト コレクションを、右側のペインはそのコレクションに含まれるチーム プロジェクトを表示します。Visual Studio に表示するチーム プロジェクトの隣のチェック ボックスをオンにして、[接続] をクリックします。これで、チーム エクスプローラーの接続パネルに移動すると、リポジトリが一覧に表示されています (図 10、マーカー 3)。

GitHub ではバージョン管理システム (VCS) として Git のみを提供していますが、Visual Studio Team Services では分散化された Git を既定で提供し、一元管理される TFVC を代替として提供しています。これら 2 つの VCS は動作が大きく異なるため、別の IDE ツールが必要です。さいわい、チーム エクスプローラー ウィンドウは両方の種類の VCS を認識して処理できるように、特別に設計されています。実際、Visual Studio Team Services サーバーに接続してプロジェクトを追加すると、チーム エクスプローラーには、Git バージョン管理下にあるプロジェクトは赤い Git アイコン (図 10、マーカー 3) 付きで示され、TFS バージョン管理下にあるプロジェクトは Git アイコンなしで表示されます。

そのため、Visual Studio Team Services のリモート リポジトリを複製するには、それが Git リポジトリでなければなりません。一覧の任意の Git リポジトリを右クリックして、[複製] をクリックできます。今回は、GitProject プロジェクトを複製対象として選択しました。選択すると、[ローカル Git リポジトリ] セクションに、既定のローカル リポジトリのパスと一緒に、リモート リポジトリ情報が入力されて表示されます (図 10、マーカー 5)。複製が完了すると、ローカル Git リポジトリ一覧にリポジトリが表示されます。リポジトリをダブルクリックして開くと、チーム エクスプローラーのホーム パネルに移動します。ホーム パネルには、Visual Studio Team Services のリポジトリを操作するために設計されたボタンがあります。[プル要求]、[作業項目]、[ビルド] などです。

リモート リポジトリを複製するプロセスは、GitHub から複製するプロセスに非常に似ています。GitHub にプライベート リポジトリをホストしている場合は、GitHub アカウントにログインして複製する必要があります。または、アカウントを所有していない場合はパブリック リポジトリをすぐに複製できます。 

一般的に、リモート リポジトリがネットワーク共有上にあるか、HTTP/HTTPS サーバーから利用できる場合は、複製が可能です。現時点では、Visual Studio はリモート Git リポジトリとの通信に SSH をサポートしていません。 

リモート リポジトリを操作する

リモート リポジトリに接続したら、[チーム エクスプローラー]、[ホーム]、[設定] の順に移動して、[リポジトリの設定] リンクをクリックできます。そこで、現在のリポジトリの接続先であるリモートに関する情報を表示できます (この操作は、複数のリモートで作業しているときに特に役立ちます)。Team Foundation Server や GitHub などのサービスに接続している場合は、設定パネルに戻ると、新しいリンクも表示されています。これらのリンクを使用すると、サービスのセキュリティ、グループ メンバーシップ、ポータルの設定などを構成できます。

チーム エクスプローラーのホーム パネルには、リモート サービスが提供するオプションに関連する新しいボタンが表示されます。Visual Studio Team Services がホストするリモート リポジトリに接続している場合、[プル要求]、[作業項目]、および [ビルド] などのボタンが表示されます。[同期] をクリックすると、チーム エクスプローラーの同期パネルが表示されます。このパネルで、同期、フェッチ、プル、公開、およびプッシュを選択できます。自動で解決できないマージ競合がある場合は、選択したマージ ツールが Visual Studio によって提示されるので、それらの競合の解決方法を手動で選択できます。

最後に、マイクロソフトのオープン ソース プロジェクト TypeScript 3 を複製してみましょう。このプロジェクトは bit.ly/1o2weYt (英語) で公開されています。これはパブリック Git リポジトリなので、[ローカル Git リポジトリ] セクションの [複製] リンク (図 10、マーカー 6) を使用して直接複製できます。本稿執筆時点で、このリポジトリのサイズは約 350 MB です。そのため、リポジトリには多数の履歴と分岐が含まれており、ダウンロードには時間がかかる可能性があります。

ローカル リポジトリが完全にダウンロードされたら、[ローカル Git リポジトリ] セクションにそのリポジトリが表示されます。リポジトリをダブルクリックすると、チーム エクスプローラーのホーム パネルでリポジトリが開きます (図 10、マーカー 7)。[プロジェクト] セクションには、GitHub リポジトリを操作するために設計された、[プル要求]、[同期]、[Pulse] (パルス)、[グラフ] などのボタンが表示されます。これらのボタンの一部をクリックすると、必要な作業を完了するために GitHub Web サイトに移動します。

[分岐] をクリックすると、チーム エクスプローラーの分岐パネルに移動します。パネルには、マスター分岐が表示されます。マスター分岐を右クリックすると、最初にコミットが行われた 2014 年 7 月 7 日から現在日付までのプロジェクト全体の履歴を表示できます。履歴表示ウィンドウでは、ウィンドウのツール バーで選択したオプションに応じて、さまざまな表示方法を使ってデータを表示できます (図 11、マーカー 1)。ここでは表示を選択したビューは、詳細ビューと呼びます。詳細ビューには、分岐のグラフ (マーカー 2) が表示されます。マージ コミットは灰色 (マーカー 3)、マージ以外のコミットは青 (マーカー 4) で示されます。グラフには、コミット ID、作成者のユーザー ID、コミットの日付、コミット メッセージ、およびタグ (あれば) が表示されます。

履歴を表示して分岐、コミット、およびマージの詳細を確認する
図 11 履歴を表示して分岐、コミット、およびマージの詳細を確認する

このビューによって、分岐の親や子への移動が簡単になります。コミットを選択して、ツール バーの子に移動ボタンまたは親に移動ボタン (図の 3 つ目と 4 つ目のボタン) を使用します。分岐が矢印の先端部で終わっている場合 (マーカー 5) には、そのコミットをクリックすると (強調表示された行を参照)、親と子をつなぐ線が引かれます (マーカー 6)。

まとめ

Visual Studio 2015 は、一般的な数多くの高度な Git 機能に便利にアクセスできる GUI があります。これが可能なのは、基盤となる LibGit2 Git エンジンのおかげです。Visual Studio 2015 では Git がほぼ完全にサポートされていますが、一時退避など、一部のあまり一般的ではない操作では Git コマンドライン インターフェイスを使った操作が必要です。Visual Studio の Git ツールは非常に広範なため、Git コマンドライン インターフェイスを使わないまま、ほとんどの Git タスクをわずかな手間で実行できます。好奇心旺盛な Git ユーザーや上級 Git ユーザーは、ある時点で確実にベアメタル Git へのアクセスが必要になるでしょう。そのようなユーザーは、PowerShell Interactive Window を起動して、公式の Git for Windows コマンドライン インターフェイスを操作して目的を実現できます。なお、Git for Windows コマンドライン インターフェイスは Visual Studio にも含まれています。Visual Studio では、GUI とコマンドライン オプションによって、開発者のスキル レベルにかかわらず、満足感のある準備の整った Git へのアクセスできるようになっています。


Jonathan Waldman は、マイクロソフト テクノロジとソフトウェア人間工学を専門とする、マイクロソフト認定プロフェッショナルです。マイクロソフトのテクノロジ スタックにその誕生から携わっており、団体、政府、民間企業のいくつかの非常に目立つプロジェクトではリードの役割を果たしました。Waldman は Pluralsight 技術チームの一員で、拡張 JQuery UI ウィジェットの商用 Wijmo ライブラリに関する Pluralsight のビデオ トレーニング コースを作成しました。連絡先は、jonathan.waldman@live.com (英語のみ) です。

この記事のレビューに協力してくれた技術スタッフの Jeremy Epling (Microsoft) と Edward Thomson (GitHub) に心より感謝いたします。
Jeremy Epling は、マイクロソフトの Visual Studio Team Services および Team Foundation Server チームで働く主任プログラム マネージャーです。

Edward Thomson は、GitHub のソフトウェア エンジニアで、O'Reilly Media の Git for Visual Studio トレーニング (www.gitforvisualstudio.com、英語) の作者です。