【Visual Studio (2022)】Git/GitHubを使用したソース管理(Gitローカル編)

Git(ギット)は、オープンソースの分散型バージョン管理システムです。

ソフトウェア開発の現場で広く使われており、コードやファイルの変更履歴を管理し、複数人での共同開発を効率化します。

本ブログは、Udemyで人気の「ピーコックアンダーソン氏」が作成した、「VisualStudioでGit&GitHubを使ってソースコードを管理する方法【C#】」を参考にし、自分なりにGitを操作した手順と少しの考察を紹介します。

Gitによるバージョン管理の基本手順

  1. ローカルリポジトリの作成
    各自のパソコン内に、ソースとソースの変更履歴を保存する領域(ローカルリポジトリ)を作成する

  2. 変更履歴のコミット
    変更履歴をローカルリポジトリ内のに記録(コミット)する

  3. ブランチの作成(必要な場合)
    新機能を追加する場合等、変更履歴の流れを分岐させ、上手くいけばブランチを統合(マージ)し、うまくいかない場合はブランチを切り捨てる

  4. 各自のリポジトリを同期する
    • GitHub上に各自がアクセスできる「リモートリポジトリ」を作成
    • 各自が「リモートリポジトリ」へ変更をプッシュし、且つ「リモートリポジトリ」からプルしてローカルリポジトリを同期させる

  5. リベースやリバートで履歴を整理する
    • リベース
      • 変更履歴を直線的に保つためコミット履歴を再整理します。
    • リバート
      • 新しいコミットを追加することで履歴を「逆転」させ、特定の変更を無効にします。リセットとは異なり「逆転」前の履歴も保持されます。

Gitのインストールと初期設定

Gitのインストール

  • Visual Studio を「コードなしで続行」
  • メニューの「ツール」→「ツールと機能を取得」
  • 「個別コンポーネント」タブで Git を検索し「Git for Windows」にチェック
  • 「変更ボタン」をクリックしてインストール
  • Gitのインストール確認
    コマンドプロンプトで、「git –version」と入力しバージョン番号が表示されればOK

ローカルリポジトリ Git使用手順

  • 使用環境
    • Windows 10 Pro 2009
    • Visual Studio Community 2022 17.14.0
  • 簡単なC# Windows Formアプリ「Git_Test_A」(.NET Windows)を作成して手順を説明します
    • サンプルプログラム
      入力欄A、Bに数値を入力し「加算」又は「減算」ボタンをクリックしたら結果を「回答欄」に表示

ローカル Gitリポジトリの作成

  • メニュー「Git」→「Gitリポジトリの作成」
  • 「ローカルのみ」を選択し「作成」ボタンをクリック
  • 画面左下の「NuGetパッケージをクリック」して「正常に作成されました」のメッセージが表示されれは作成は成功
  • Gitに管理されている項目には、キーマークが付く

変更内容の確認

  • ソースを変更したコンテンツには✔マークが付いて変更の差分を確認できる
    • 掛け算のコードを追加
  • 差分の表示
    変更されたコンテンツを右クリック⇀「Git」→「未変更のものと比較」
  • 左側が変更前、右側が変更後

コミット前の変更内容取り消し

  • サンプルプログラムに「Aの二乗」を追加したが、不要なので変更を取り消す場合
    • 取り消し前
  • ①「Form1.cs」を右クリック ⇀ ②「Git」→「変更を元の戻す」
  • 取り消し後
    変更コンテンツの✔マークも消えている

変更内容の確定 コミット

  • メニュー①「表示」→②「Git変更」
  • ③に変更されたコンテンツが表示されるので確認
  • ④に変更内容を入力
  • ⑤「全てをコミット」ボタンでコミット

コミットの確認

  • メニュー①「表示」→②「Gitリポジトリ」をクリック
    ③のコミットの履歴が表示される。プリジェクトを作成してから「掛け算の追加」と「割り算の追加」がコミットされているのが確認できる。

コミットの内容確認

コミットの履歴で、「割り算の追加」の青い〇をクリックすると、変更内容が確認できる。

コミット後の取り消し

サンプルプログラムに「Aの二乗」と「Bの二乗」をコミットした後、「Aの二乗」までに戻りたい場合

  • メニュー「表示」→「Gitリポジトリ」で現在のコミット状態を表示

「Bの二乗」のコードを残したままコミット取り消す

  • 「Aの二乗」を右クリック⇀「リセット」→「変更を保持」
  • 「Bの二乗」のコミットは消えたがソース変更の✔は付いており、「Forms.cs」を確認すると「Bの二乗」のコードは残っている。

「Bの二乗」のコードも削除してコミット取り消し

  • 再度「Bの二乗」をコミット
  • 「Aの二乗」リポジトリを右クリック⇀「リセット」→「変更を削除」

「Bの二乗」のコミット・ソース変更の✔・「Bの二乗」のコードが全て削除された。

ブランチの利用

ブランチの目的

ブランチは「master(本流)」に影響を与えずに、枝分かれして作業する為に作成します。主な目的は、

  1. 機能追加や修正を独立して行う
  2. バグ修正やホットフィックス
  3. 同時に異なる機能や修正を開発する
  4. 長期的なプロジェクト管理
  5. 実験的な機能をテスト etc.

ブランチの作成

最初は「master」しかないので、「master」からの分岐になります。

  • 作成手順
    • ①「master」のどのコミットからブランチするのか指定
    • ②メニュー「Git」→「新しいブランチ」→「新しいブランチの作成」→ ダイアログ表示
    • ③「ブランチ名」を入力
    • ④「ブランチのチェックアウト」のチェックを確認
      • 「ブランチのチェックアウト」のチェックが入っていないとブランチ作成後、新しいブランチに分岐できない
    • ⑤「作成」をクリック

コミット「割り算の追加」からブランチ「Git_Test_A_2」が作成されました。現在どのブランチを操作しているかは、画面右下からも確認できます。

ブランチのコード変更とmasterの状態

ブランチ「Git_Test_A_2」のコードを変更し、「master」に影響がない事を確認します。

  • 各計算ボタンをクリックした時に「ブランチ名」を表示する変更を加え、コミット

■ブランチ「Git_Test_A_2」のコード

  • 「master」にはブランチ「Git_Test_A_2」のコード内容が反映されていない。

ブランチの統合

ブランチの統合例として、以下の要件で統合してみます。

  1. ブランチ「Git_Test_A_2」の「割り算の追加」からブランチ「Git_Test_A_3」を作成
  2. ブランチ「Git_Test_A_3」の各演算に「ブランチ「Git_Test_A_3」実行」のメッセージボックスを追加
  3. ブランチ「Git_Test_A_2」にブランチ「Git_Test_A_3」を統合する

■ブランチ「Git_Test_A_3」

  • 「ブランチ「Git_Test_A_3」加算実行」のメッセージボックスを追加

ブランチの統合手順

  • ①統合先のブランチ「Git_Test_A_2」を表示
  • ②統合するブランチ「Git_Test_A_3」をリポジトリ画面で右クリック
  • ③「’Git_Test_A_3’を’Git_Test_A_2’にマージする」をクリック

ブランチ「Git_Test_A_3」でコミットした変更が、「Git_Test_A_2」に表示され、統合された。

ブランチ「Git_Test_A_2」ソースコード。「Git_Test_A_3」で追加したコードが統合されている。

フォームの統合

フォームの統合は可能ですが、マージの競合が発生し解決する事が難しい場合もあります。その理由としては、

  • フォームの構造が異なる
    • マージ時に.Designer.csファイルの自動生成コードが破損しているケースが多い
  • 手動編集が混在
    • WinFormsのデザイナからではなく、手動でコードを変更した場合に競合が発生しやすい
  • Visual Studioのキャッシュ問題
  • .Designer.csファイルは自動生成コードのため、手動での解決が難しい

※私の場合、他のプログラムで「GitHub Copilot」の力を借りて何とか統合する事ができました。

ローカルブランチの削除

  • ブランチ削除の前提
    • 現在使用していないブランチであること(チェックアウトしていない)。
    • マージが完了していること(削除後に復元が困難なため)。
    • ローカルとリモートでは異なる操作が必要です

ブランチ「Git_Test_A_3」の削除

  • 手順
    • ブランチ管理ウィンドウを表示します。
    • 削除したいブランチを右クリック
    • [削除] を選択
    • 確認ダイアログが表示されるので、「OK」をクリックします。

【参考文献】

次回、GitHubリモート編をお届けします。

タイトルとURLをコピーしました