Git と Visual Studio 2017 その 2 : ソリューションの保存

前回の記事ではレポジトリの作成を行いました。今回は Visual Studio 2017 でアイテムを追加して、コミットしていきます。

アイテムの追加

クラスファイルなど新規にアイテムを追加した場合、Visual Studio と Git 観点からどうなるか見てみましょう。

1. プロジェクトに新しく “Class1.cs” ファイルを追加。

image

2. 追加したファイルおよびプロジェクトファイルのアイコンが、新規追加と変更アイコンであることを確認。プロジェクトが変更になるのは、追加したファイルの情報を新規に含むため。

image

3. ‘git status’ を実行。Class1.cs は期待通り未トラック状態になっているが、プロジェクトファイルが表示されていない。これはまだプロジェクトファイルが保存されていないため。

image

4. Visual Studio ですべて保存を行ってから再度 ‘git status’、今度は期待通り両ファイルが表示。プロジェクトファイル (.csproj) はすでにコミットしたアイテムであるため追跡済となっている。

image

ステージエリアに追加

この時点では作業ディレクトリでの変更であるため、次にアイテムをステージエリアに追加します。Git では ‘git add’ で追加しましたが今回は Visual Studio 2017 で追加します。

1. プロジェクトを右クリック | ソース管理 | コミットをクリック。この操作では実際にコミットはされず、変更メニューに移動される。

image

2. 2 つの変更アイテムがあることを確認。1 つは [追加] 表記。

image

3. [+] ボタンをクリックするか、アイテムごとに右クリック | ステージでステージングエリアに追加。

image

4. アイテムが “ステージング済みの変更” に移動。’git status’ でも同様の状態を確認。[-] ボタンをクリックするかアイテム右クリック | アンステージメニューで “変更” エリアに戻せる。

image

image

コミットの実行

最後にコミットしてみましょう。

1. コミットコメントを入力して ”ステージング済みをコミット” をクリック。

image

2. コミットの SHA1 ハッシュ値が表示される。”同期” リンクは別の機会に説明するため今回は無視し、アクション | 履歴の表示をクリック。

image

3. ローカル履歴が表示されるが、これは ‘git log’ コマンドの結果と同等。確認のため ‘git log –graph –pretty=format:”%h %an %ad %s” –date=format:”%Y/%m/%d %H:%M:%S more”’ の結果と比較。

image

image

コミットの種類

Visual Studio では git commit のオプションをいくつかサポートしています。

commit  -a -m

Visual Studio ではあまり意識しませんが、Git の commit コマンドに -a を付けることで、コミット前にステージングエリアにアイテムを自動追加することが出来ます。Visual Studio 2017 ではこの機能プラス、未追跡ファイルの自動追跡をワンクリックで実現します。

1. 新規に Class2.cs ファイルをソリューションに追加して、再度コミット画面に移動。

2. コミットコメントを入力して “すべてをコミット” をクリック。これで追跡済、未追跡のファイルともにコミットが実行。また未保存のファイルがある場合は保存ダイアログが表示。

image

3. 履歴を確認。

image

commit –amend

もしコミットに含めるべき内容を入れ忘れた場合、commit –amend オプションで追加が可能です。Visual Studio 2017 はこの機能もサポートします。ただし Git ではコミットコメントだけを変更することが出来ますが、Visual Studio 2017 ではコメントだけの編集は行えません。

1. Class3.cs ファイルを新たに追加し、コミットメニューから変更画面に移動。

2. コミットコメントを入力し、アクション | 以前のコミットを修正をクリック。

image

3. 履歴を確認。

image

重要な点は最後のコミットの SHA1 ハッシュ値が前回とは異なる点です。つまり前回のコミットオブジェクトは異なるコミットオブジェクトが作成されたことになります。

まとめ

Visual Studio 2017 で Git を使い始めた頃は深く考えていませんでしたが、ステージングの概念やコミットボタンを押した際の挙動を理解して少し安心です。次回は変更のリセットについて紹介します。次の記事へ

中村 憲一郎