Git と Visual Studio 2017 その 13 : Visual Studio によるアイテムの比較

前回の記事では Git でアイテムの比較を行いました。今回は Visual Studio 2017 の機能を見ていきます。 アイテムの比較 : VS Visual Studio 2017 では Git で行えるアイテム比較のうちよく使うものが GUI でサポートされているほか、独自の機能も実装されています。 二つのコミットの比較 1. チームエクスプローラー | 変更 | アクション | 履歴の表示を開きます。 2. 1 つ目と3 つ目のコミットを選択し、右クリックから ”コミットの比較” をクリックします。 3. コミットの比較ウィンドウが開き、比較結果が表示されます。 4. 変更セクションにある README.md をダブルクリックすると差分が表示されます。Git でも ‘git difftool HEAD~1 HEAD README.md’ を実行すると同じ画面が開きます。前回記事で発覚した通り、ファイルのエンコードが異なりますが、その旨も表示されています。 5. 差分の比較などは GUI ツールである VS の遥かに容易ですが、Git は stat など様々なオプションを提供するため必要に応じて使い分けします。… Read more

Git と Visual Studio 2017 その 12 : Git によるアイテムの比較

前回の記事では構成について触れました。今回は Git におけるアイテムの比較について見ていきます。Visual Studio については次回。 アイテムの比較 : Git Git では diff コマンドを使ってアイテムの差分を確認できます。比較対象は、例えば 2 つのコミット間やステージングエリアのアイテムと作業ディレクトリのアイテム、またはブランチ間の差異などです。また、1 つのファイルを比較することも、ディレクトリごと比較することもできます。早速やってみましょう。 2 つのコミットを比較 1. まず ‘git log –oneline –graph –all’ を実行して現状の確認。第 10 回の記事の最後で、リモートより dev ブランチをチェックアウトし忘れた模様。 2. ‘git diff HEAD~1 HEAD’ を実行。HEAD は現在のブランチがポイントするコミット e45a3c6 を示し、HEAD~1  は直前の c69d3e9 コミットを示すため、これらの差分が表示。ただし文字化けしている。README.md はもともと GitHub で作成されたため README.md は UTF-8 で作成されているが、コミット 5c96d7c を行った際、’echo “文字列” >> README.md’ で文字列を追加したため、その部分だけ SJIS… Read more

Git と Visual Studio 2017 その 11 : 構成

前回の記事では、Visual Studio 2017 を使ったソリューションの共有を説明しました。今回は Git の構成について見ていきます。Git は構成を変更することで様々な動作を変更出来ます。 構成のスコープ Git の構成には 3 つのスコープがあります。より狭いスコープの設定が最終的に適用されます。 システム: 同じ PC を使うすべてのユーザーに適用 グローバル: 特定のユーザーのすべてのレポジトリに適用 ローカル: 特定のレポジトリにのみ適用 ‘git config’ コマンドで構成を操作しますが、スコープの指定をしない場合はローカルの構成が変更されます。詳細はこちら。 構成 : Git まず Git における構成を見ていきましょう。 1. ‘git config -l’ を実行して全スコープから現在の構成を表示。 2. ‘git config –local -l’ を実行してローカルスコープの設定を取得。 3. ‘git config user.name’ を実行して現在のユーザー名を表示。 4. ‘git config user.name <yourname>’ を実行してユーザー名を設定。スコープの指定を省略しているため、ローカルスコープで設定。グローバルスコープで設定したい場合は、‘git config –global user.name <yourname>’… Read more

Git と Visual Studio 2017 その 10 : VS でソリューションの共有

前回の記事では Git と GitHub を使ったソリューションの共有を説明しました。今回は Visual Studio と GitHub でのソリューションの共有を見ていきます。 GitHub レポジトリの削除 前回作成した GitHub.com のレポジトリは一旦削除します。“Settings” | “Danger Zone” から削除が可能です。 Visual Studio 用 GitHub エクステンション Visual Studio 2017 は既定で GitHub をサポートしてませんが、便利なエクステンションがあります。 1. ツール | 拡張機能と更新プログラムをクリック。 2. オンラインを選択して、検索より “github” を検索。“GitHub Extensions for Visual Studio” をインストールします。 3. 必要に応じて Visual Studio を閉じて、インストールウィザードに従って進めます。 4. 次にアカウントを設定します。チームエクスプローラーより設定を選択。 5. 今回はこのプロジェクトの範囲でのみ設定したいので、レポジトリの設定をクリック。 6. オーバーライドのチェックボックスを入れて、GitHub と同じユーザー名、メールアドレスを入力して更新。… Read more

Git と Visual Studio 2017 その 9 : Git でソリューションの共有

前回の記事では、ブランチ切り替え時における作業の一時保存について説明しました。今回は Git を使って手元のソリューションを他の人と共有する方法について見ていきます。共有方法は多くありますが、今回は GitHub.com における共有を考えます。もしアカウントが無い場合は http://github.com へ行って、サインアップしてください。 GitHub でレポジトリ作成 まずは GitHub.com 上に今回使うレポジトリを作ります。 1. http://github.com へログイン。 2. “Start a project” をクリック。 3. 名前や説明を入れ、各種設定は既定値のまま作成。 リモートの追加とプッシュ 次に Git で、作成したリモートサーバーの情報を追加します。 1. 作成した GitHub のレポジトリでリモート用の git コマンドを確認。 2. 表示されている通り、‘git remote add origin https://github.com/kenakamu/VS_Git.git” を実行。これで指定した URL を ‘origin’ という名称で利用可能。名称は任意でよいが origin を使うことが一般的なため、今回はそのまま採用。 3. ‘git remove -v’ を実行して現在のリモートを確認。 4. ‘git branch -a’ を実行。-a… Read more

Git と Visual Studio 2017 その 8 : 一時的に作業を保存する

前回の記事ではチェリーピックで、他ブランチのコミットを一部適用する方法を説明しました。今回はブランチの切り替え時に作業中のファイル類を一時保存する方法を見ていきます。 Git におけるブランチ変更時の挙動 まずブランチ切り替え時に Git がどのように動くかを確認しましょう。 1. ‘git log –oneline –graph –all’ 実行で現状確認。前回記事のチェリーピックが終わった状態。 2. シンプルにするため、チェリーピックの前にリセット。 3. 次に作業を行う。Class1.cs ファイルに変更を加えてステージに追加。 4. さらに Class1.cs file に変更を加えて保存。 5. ‘git status’ を実行して、Class1.cs がステージングエリアと作業ディレクトリに存在することを確認。これは git add は実行したタイミングのファイルを保持するため、その後に変更したものは追跡していない。 6. ‘git checkout master’ で master ブランチに移動。Class1.cs に変更がある事が表示される。 7. ‘git status’ を再度実行。ブランチは master だがステージングエリアも作業ディレクトリも残っていることを確認。 作業中ファイルの保存 : Git ブランチを間違えて作業している場合は上記動作が好ましいのですが、緊急で別のブランチに移動しないといけない場合には、移動先のブランチには作業中の変更を持ち越したくありません。その場合 git stash コマンドで作業中のアイテムを一時保存できます。 1. ‘git checkout… Read more

Git と Visual Studio 2017 その 7 : チェリーピックで他のブランチから特定のコミットを反映

前回の記事ではリベースについて説明しました。今回は他のブランチにあるコミットのうち、任意のものだけを反映する方法として、チェリーピックを見ていきます。 チェリーピック : Git まずは Git のチェリーピックがどのように動作するか確認します。 1. 現状確認のため ‘git log –oneline –graph –all’ を実行。前回記事の処理により、リベース完了時点であることを確認。 2. まず dev ブランチをリベース前に戻す。’git reflog’ よりリベース前のコミット ID を検索。 3. ‘git reset –hard 5df97d2’ 実行後 ‘git log –oneline –graph –all’ でリベース前に戻ったことを確認。 4. 今回はマージやリベースではなく、master の Patch1.cs コミットを dev に適用するため、‘git cherry-pick ac2b093’ を dev ブランチで実行。競合発生を確認。 5. ‘git mergetool’ で競合を解消。 6. 競合解消後、‘git commit -am… Read more

Git と Visual Studio 2017 その 6 : リベースで他のブランチからコミットを反映

前回の記事ではブランチ間のマージを紹介しました。今回は似て非なる機能としてリベースを見ていきます。 リベース : Git リベースはマージと何が違うのでしょうか。例えば dev を切ってコミットを追加した後、何かしらの事情で master にもコミットが作成された場合を考えます。 マージ: dev から master をマージすると master のコミットが、現在の dev のコミットの後に適用されます。 リベース: master のコミットが dev のコミットの前に入るため、あたかも master でが作成された後に dev を切ったような状態となります。 実際にやってみましょう。 1. ‘git log –oneline –graph’ を実行して現在の状況を確認。前回の記事の直後のためマージコミットが最後に存在。 2. マージ前に戻すため、‘git reset –hard c79adb2’ を実行し、再度 ’git log –oneline –graph –all’ を実行。 3. この時点で Visual Studio 2017 より Patch1.cs を追加。全て保存。 4…. Read more

Git と Visual Studio 2017 その 5 : マージで他のブランチからコミットを反映

前回の記事ではブランチについて紹介しました。今回はブランチの変更を取り入れる、マージについて見ていきます。 マージ : Git ブランチを作る理由は、機能追加や修正など色々ありますが、変更はいずれ反映する必要があり、Git では merge コマンドを使います。 1. ‘git branch’ を実行。master と dev ブランチがあり、現在 dev ブランチにチェックアウト中。 2. ‘git log –oneline –graph’ を実行。master より新しいコミットがあることを確認。 3. マージをする際、マージを受け入れる側のブランチで作業を行うため、master ブランチに移動。その後 ‘git merge dev’ を実行。結果として “fast-forwad” と出ていることを確認。 4. ‘git log –oneline –graph’ を実行。master が dev と同じコミットをポイントしている。つまり今回のマージで新しいコミットは作成されておらず、ref\heads\master ファイルがさしているコミットの情報が変わっただけ。この場合 dev ブランチがどこから作成されたかなどの情報が失われている。 5. マージをやり直すため、‘git reset –hard c79adb2’ を実行。’git log –oneline –graph –all’… Read more

Git と Visual Studio 2017 その 4 : ブランチ

前回の記事ではコミットのリセットについて紹介しました。今回の記事ではブランチを見ていきます。 ブランチ : Git ブランチは、現在のコードには手を加えることなく変更をする際に切る(作成する)もので、レポジトリの完全なコピーを持つイメージでした。コピーであれば何をしても安心ですよね。しかしプロジェクトの規模が大きい場合、レポジトリ全体をコピーするのは無理があり、この点 Git はうまく処理します。ではどのように動作するか見ていきましょう。 1. ブランチを切る前に現在の .git ディレクトリのプロパティより、サイズおよびファイル/フォルダ数を確認。 2. ‘git branch dev’ を実行して dev ブランチを作成。 3. 再度 .git ディレクトリのプロパティを確認。ファイル数が 2 つ増加。これらのファイルは .git\refs\heads および .git\logs\refs\heads ディレクトリに dev ファイルが作成されたため。 4. 作成されたファイルを type で表示。 5. 一方 .git\refs\heads\master を見た場合も同じ SHA1 ハッシュ値を持っている。つまりブランチを作成した際、Git はレポジトリーをコピーすることはなく、新しいブランチ名と同じファイルが作成しコミットのハッシュ値をコピーするだけのため、高速に完了する模様。 6. 現在 master ブランチにいるため、‘git checkout dev’ で dev ブランチに移動(チェックアウト)。HEAD を確認するとポイントしている先が dev ファイルになっているため、ブランチの移動は HEAD の書き換と同等。… Read more