Date

Visual Studio 2013 はバージョン管理システムとして TFS のほかに Git をサポートしている。 無料版である Express Edition でも使える。いろいろと試してみたのでメモしておく。

プロジェクトを新規作成し、最初の commit をする

FILE - New - Project を選択し New Project ダイアログを開く。 Add to source control をチェックしてから OK ボタンをクリックしプロジェクトを作成する。

{% img /img/2013-11-24-vsgit/add_to_source_ctrl.png New Project %}

Choose source control のダイアログが表示される。ここで Team Foundation Version Control または Git のいずれかを選択する。ここでは Git を選択して OK ボタンをクリックする。

{% img /img/2013-11-24-vsgit/choose_source_control.png Choose source control %}

エクスプローラでプロジェクトを作成したフォルダを見ると、 .git フォルダができてることを確認できる。

Team Explorer - Home から Changes をクリックする。 Team Explorer が表示されていないときは VIEW - Team Explorer を選択する。

{% img /img/2013-11-24-vsgit/team_exp_home.png Team Explorer - Home %}

プロジェクトを新規作成したときに生成されたファイルを確認できる。

{% img /img/2013-11-24-vsgit/team_exp_changes.png Team explorer - Changes %}

Enter a commit message の入力欄にメッセージを入力し Commit ボタンをクリックするとローカルのリポジトリに commit できる。

差分を確認する

以下のようにコードを修正したとする。

```c++ ConsoleApplication1.cpp

include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
commit 前に修正した内容(差分)を確認するには通常 `git diff` コマンドを実行するが Visual Studio 2013 はその機能が統合されている。 Team Explorer - Changes  ConsoleApplication1.cpp を右クリックしてコンテキストメニューを開き、Compare with Unmodified を選択する。

{% img /img/2013-11-24-vsgit/team_exp_compare.png Team explorer - Changes %}

すると、以下のように差分が表示される。

{% img /img/2013-11-24-vsgit/diff.png Diff - ConsoleApplication1.cpp %}

差分を確認したら、ここで commit しておく。

# GitHub をリモートリポジトリとして push する

GitHub にリモートリポジトリを用意し、そこに push してみる。

GitHub でリポジトリを新規作成し URL を取得しておく。

{% img /img/2013-11-24-vsgit/github_create_repo.png 新しいリモートリポジトリを作成する %}

{% img /img/2013-11-24-vsgit/github_repo_url.png HTTPS  URL を取得しておく %}

Team Explorer - Home から Unsynced Commits をクリックする。 Publish to Remote Repository  Github に作成したリポジトリの URL を入力して Publish をクリックする。数秒で GitHub  push される。

{% img /img/2013-11-24-vsgit/team_exp_specify_remote_repo_url.png Team Explorer - Unsynced Commits %}

# ブランチを作成し push する

プロジェクトを新規作成した直後は master ブランチにいる。実際、複数人で何か作業をするときは master ブランチではなく、別のブランチを作成してその上で行うことがある。

Team Explorer - Home から Branches をクリックする。 New Branch をクリックし、新しいブランチ名を入力する。ここでは branch1 と名付けた。 Create Branch ボタンをクリックすると新しいブランチ branch1 が作成され、今いるブランチが変更される。

ここで、以下のようにコードを修正したとする。

```c++ ConsoleApplication1.cpp
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    printf("Hello, world at branch1.\n"); // この行を修正
    return 0;
}

先ほどの手順に従って commit する。

Team Explorer - Branches を開き branch1 を右クリックし View History を選択する。

{% img /img/2013-11-24-vsgit/team_exp_view_history.png View History %}

以下のように、変更履歴が表示される。右端に branch1 が記述されていることが確認できる。

{% img /img/2013-11-24-vsgit/history_branch1.png History %}

これも Github に push してみる。

Team Explorer - Branches を開き branch1 を右クリックし Publish する。 Github で確認してみると、確かに branch1 がリモートリポジトリ上に反映された形で push されていることが確認できる。

{% img /img/2013-11-24-vsgit/branch1_on_github.png Branches %}

このあとブラウザ上から Pull Request を作成できる。リモートリポジトリに対して自プルリを作成、 merge というワークフロー Shared Repository Model が使える。

{% img /img/2013-11-24-vsgit/create_pull_request.png Pull Request %}

ブランチを切り替える

Team Explorer - Branches に表示されているブランチをダブルクリックするか、右クリックして Switch を選択すると、今いるブランチが切り替わる。

ConsoleApplication1.cpp を開いたまま master, branch1 ブランチを切り替えてみると、エディタ内でソースコードが変わっていることが確認できる。

Visual Studio 上でブランチを merge する

branch1 を master ブランチに merge してみる。

Team Explorer - Branches から Merge をクリック。 merge 元と merge 先を選択して Merge ボタンをクリックする。

{% img /img/2013-11-24-vsgit/merge_on_vs.png Team Explorer - Branches %}

Team Explorer - Unsynced Commits を開き push する。リモートリポジトリの Network graph を確認してみると、以下のようになっているはず。

{% img /img/2013-11-24-vsgit/repo_graph.png Network graph %}

Pull して Visual Studio に取り込む

Pull Request が採用され master ブランチに反映されたことを想定して、その結果を pull で取り込んでみる。

まず Visual Studio 上で branch2 を作成し、以下のようにコードを修正する。そのあと commit, push しておく。

```c++ ConsoleApplication1.cpp printf("Hello, world at branch2.\n");

1
2
3
4
5
6
7
8
次に GitHub 上で Pull Request を作成する。作成した Pull Request を master ブランチに merge する。すると Network graph は以下のようになる。

{% img /img/2013-11-24-vsgit/network_graph.png %}

この時点で Visual Studio 上で master ブランチに移動し、コードを確認してみる。まだ pull してないので branch1 のままになっているはず。

```c++ ConsoleApplication1.cpp
    printf("Hello, world at branch1.\n");

Team Explorer - Unsynced Commits を開き Incoming Commits - Fetch をクリックする。

{% img /img/2013-11-24-vsgit/incoming.png Team Explorer - Unsynched Commits %}

Merge pull request ... という表示が確認できる。続いて pull を実行してみる。

改めてソースコードを確認してみると master ブランチに branch2 が merge されていることが確認できる。

c++ ConsoleApplication1.cpp printf("Hello, world at branch2.\n");

このように Visual Studio 2013 では、統合環境上で Git を使った開発ができる。細かい操作が必要な時は コマンドラインも追加でインストールできるようになっている。


Comments

comments powered by Disqus