【Git】Windowsユーザー向け、Gitがなんとなくわかるようになるかもしれない記事【初学者】

 # はじめに

:::note info
本記事は、Git初心者向けのn番煎じ系記事です。
完全な説明よりも、初心者向けにあえて簡易的な説明をする場面が多々あり、
Gitを布教する際に、大体のイメージを伝えるための備忘録的な記事になります。

また、Gitを使うことよりもGitのインストール部分に重きを置いているため、使い方を理解するのには向いていません。
:::

この記事を読めば、「Gitってなに？」のレベルから、「Gitって便利だよね！」程度のレベルまでの知識はたぶん得られるかもです。

 # Git,GitHubってなに？ 

一言で表すと、
Gitは、__分散型バージョン管理ツール__ であり、
GitHubはGitで管理しているデータを保管する __クラウドストレージ__ のようなものです。
ただ、GitHubはリモートリポジトリとしてGitで管理しているデータを保管するだけでなく、チーム開発に役立つ __Issue・Pull Requests・Milestone・Projects__ などの機能を持っています。

 # Gitがないとどうなの？

 #### Gitナシで開発するときに不便なこと
 1. 複数人で同じファイルを編集した時に、同じ個所を編集したことに気づかないで上書きしてしまうことがある。
 1. そのファイルがいつ・どこを編集したのかの把握が難しく、古いバージョンのファイルを編集してしまうことがある。
 1. そのファイルを誰が編集したかの履歴を把握しにくい。
 1. ファイルを丸々コピーして逐一バックアップしておかないと、ファイルが消えたとき復旧できない。

#### Gitアリだとどのようになる？
 1. 同時に同じ箇所を上書きしようとすると、「その箇所は競合している！」とGitが阻止してくれる！(**競合・衝突:conflict**)
 1. ファイルがいつ・どこを編集したのか履歴を確認できる！(**log**)
 1. 誰がどのファイルを変更したのか履歴を確認できる！
 1. 変更の確定と共有がそのままバックアップになる！(バックアップに気を取られにくくなる)

#### ほかにも以下のような機能・利点がある！
 - クラウド上(**リモートリポジトリ**)にあるデータをローカル環境(**ローカルリポジトリ**)に複製できる！(**クローン：clone**)
   - ローカルリポジトリの変更をリモートリポジトリにアップロードできる(**プッシュ：push**)
   - 変更されたリモートリポジトリの内容をローカルリポジトリにダウンロードし、まとめる(**プル：pull**)
 - バグがなく、即座にリリースできるファイルを保管するスペース(**ブランチ:branch**)と、編集するための作業用ブランチを分けることができる
 - 作業用ブランチ同士を変更内容を容易にまとめる(**マージ:marge**)することができる
 - ファイルの変更を過去のバージョンに切り替えることもできる！(**チェックアウト：checkout**)
     - 複数あるファイルの変更のうち、一部だけ取り消せる！(**リバート：revert**)

:::note info
これらの機能が実現できるのが、<font color="Red">**Git(分散型バージョン管理ツール)**</font>だということ！
つまり、使いこなせれば**開発効率爆上げ！**
:::


 # Gitのインストール

早速Gitの凄さを体感するために、まずはインストールしてしまいましょう！

最初に、こちらのリンクからGitのダウンロードページを開きましょう。

https://git-scm.com/download/win

Windows 64bit版を使用している方はこの赤枠のリンクをクリック！
すると、「Git-<バージョン>-64-bit.exe」という名前のファイルがダウンロードできるかと思います。
※記事執筆時点(2023/04/20)だと「Git-2.40.0-64-bit.exe」という名前でした。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/3ac7782c-dd21-bf18-959f-ea1cd4de392b.png)

ファイルを実行してインストーラーを起動しましょう。
こんな感じの画面が出てきましたか？
ライセンスに同意するのであれば「Next」をクリックしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/a5cf143d-375d-f649-3c77-b31a59e081cb.png)

次にGitをインストールする場所の設定ですね。
特にこだわりがない場合はデフォルトのままで大丈夫だと思います！
「Next」をクリックしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/00f23cea-8ad6-fcec-2220-5e25f292fd13.png)

次はインストールするコンポーネントを選択する感じですね。
こちらも特にこだわりがないのであればそのままで大丈夫です。
「Next」をクリックしましょう。
※今回はデフォルトのままなのでインストールするのに292.2MB使うようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/fc6b4fef-750f-1db5-4754-f4455722c771.png)

次の画面では、「スタートメニューに作成されるショートカットの場所を変更するか」や「スタートメニューフォルダを作成しない」かを聞かれていますが、基本的にそのままの方がいいでしょう。
変更せず、「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/9a6b68f9-df33-db73-b67b-ec30fb889566.png)

この画面ではGitのコミットメッセージなんかを編集するのに使うデフォルトのテキストエディタを選択する必要があります。
デフォルトではVimというテキストエディタが指定されていますが、好みのエディタがある場合はそれを設定しましょう。
特にこだわりがなければVimが楽なのでそのままにしましょう。
~~(Vimはエエぞ...)~~ Vim最高！みんなもVimerになろう！
...好みのエディタを選択したら「Next」をクリックし次の画面に進みましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/952ad18d-80cc-3ac2-d445-26e9df724538.png)


次の画面では、「git init」というコマンドを実行したときにリポジトリを作成することができるのですが、リポジトリを作成するときのオプションを設定する画面です。
特に理由がなければ「Next」をクリックしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/bd48b646-21be-1da4-5d5f-99b4022984cc.png)


ここでは、git関係のコマンドをGit Bash限定で使用できるか、
サードパーティ製のソフトウェアでも使用できるようにするか等聞かれていますが、
「Recommended」とあるように、サードパーティ製のソフトウェアでも使用できる状態の方が都合がいいのでデフォルトのままでいいでしょう。
「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/0c30550f-6da9-39e7-5a56-8e5e4f04431c.png)

この画面では、Gitがあらかじめパッケージングしているssh.exe(ssh接続するコマンド)を使用するか、外部のssh.exe(PC側にもともと入っていたもの等)を使用するかを聞かれています。
特にこだわりがなければ、上のあらかじめパッケージングされている方を選択しましょう。
「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/a929606f-2185-dc5f-9bba-3846069a6648.png)


これは、GitがHTTPS通信するときにデフォルトの認証局を使うか、Windowsに合わせた認証局にするか的な感じでしょうか...
若干理解が浅いですし、本来なら下の選択肢を選んだ方がセキュリティ的にいいのかもしれないですが、Gitを使用中に変なエラーに悩まされると困るので、デフォルトの上の設定を選択します。
では「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/7ea2ee16-e08a-0a98-a362-4f6760a51690.png)

これは文字コード(改行文字)のお話ですね...
基本的にWindows環境のファイルを扱う予定なので、一番上を選択しましょう。
(細かい違いの説明はキツイです...)
では「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/f51b686e-4018-a0fb-f021-1cbc03830c93.png)

ここでは、GitBashがターミナルエミュレーターであるMinTTYを使用するか、Windowsデフォルトのコマンドプロンプトを使用するか選択するようです。
こだわりがなければ上のMinTTYを使用しましょう。
~~(というかこだわりがないので早くインストール終わらせたくなってきた)~~
...「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/097c5b33-ac46-fdf1-1a26-7ef461a41640.png)

「git pull」コマンドの挙動についての設定ですね。
デフォルト！一番上のデフォルトのままでいいです！~~面倒！~~
次の画面に進みましょう。「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/9ad0191b-25ee-9588-6584-48a2f8642223.png)

「credentioal helper」を使うかの設定ですが、使うと毎回認証情報を入力する必要がなくなって楽なので上のデフォルトのままでいいでしょう。
「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/0507925e-2fe8-fcef-ef00-9098e84a6622.png)

追加オプションの設定ですね。
特にこだわりがなければそのままでいいでしょう。
補足として、
1つ目は、Gitのファイルシステムキャッシュを有効にするかどうかを聞いています。
大幅なパフォーマンスアップが実現されるらしいので有効にしておきます。
2つ目は、シンボリックリンクを有効にするか聞いています。
あってもいいと思いますが、特になくても困らないので無効にしておきます。
(シンボリックを作成する権限も必要らしいですし)
設定がすんだら「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/48dc17e0-8681-780c-5a36-ec942811b66b.png)

この画面も追加オプションの設定ですね。
ここはデフォルトから少し設定を変え、下のほうだけチェックをいれました。
1つめは、node.jsやpythonのコンソールでGitのコマンドが使えるようですが、既知のバグが潜んでいるようです。
2つ目は、とてもすごいことに、有効にするとファイルシステムの監視システムを使用して、Gitインデックスの更新を高速化し、実際には「git status」「git add」「git commit」のコマンドを高速化することができるようです。
こちらもお好みの設定がすんだら「Install」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/92e3092e-4c9d-f5bb-a8fc-a886fa703439.png)

やっとインストールです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/37f6a960-e11a-02cb-40a9-cc0877eee508.png)

無事にインストールできましたか？
このまま「Finish」をクリックすると、Gitのリリースノートを見ることができます。
興味のある方はぜひ閲覧してみましょう。
まずはGitのインストールお疲れ様でした。🎉
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/8be633b2-78fe-0d5d-a23c-c1280febd158.png)

 # GitHubアカウント登録

こちらに関しては、私の環境が自分のアカウントを作成している都合で解説できないので、以下の記事を参考にしてください。

https://qiita.com/ayatokura/items/9eabb7ae20752e6dc79d

(@ayatokura様 素晴らしい記事をありがとうございます！)

 # GitHubへSSH接続

こちらの公式ドキュメントを参考に進めていきます。

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

まずはGitBashを開きましょう。
デスクトップ上のなにもない部分を右クリックすると出てくるメニューの中から「Git Bash Here」をクリックしましょう。
※Windows11ユーザーの場合は、「その他のオプションを表示」をクリックすると同じようなメニューが出るはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/cb7c67fc-81f5-0acf-9dc6-54a8b33d4d8f.png)

こんな感じのコンソール画面が出ましたか？
今後、Gitのコマンドはこの画面に入力していきます。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/1689e23f-3596-a545-7c4d-2b0d576de123.png)

まずは初期設定していきましょう。
以下のコマンドで先ほどGitHubに登録したユーザー名とメールアドレスを設定していきます。
もちろん、「your user name」と「your email」の部分は自分のものに変更してください。
```bash:GitBash
git config --global user.name "your user name"
git config --global user.email "your email"
```
 > 例: 
 > $ git config --global user.name "UserA"
 > $ git config --global user.email "your_email@example.com"

次のコマンドで設定できているか確認しましょう。
```bash:GitBash
git config --global user.name 
git config --global user.email 
```
 > 例: 
 > $ git config --global user.name 
 > UserA
 > $ git config --global user.email 
 > your_email@example.com

次にSSHキーを生成しましょう。
以下のコマンドを入力し、画面の指示に従いましょう。
※「Enter file in which to save the key」と聞かれたらとりあえず何も入力せずにEnterで大丈夫です。
※「Enter passphrase」「Enter same passphrase again」と聞かれたら、生成しようとしている鍵のパスワードを聞いてきています。
　1回目にパスワードを入力し、2回目にも1回目と同じパスワードを入力しましょう。
もし、1つ目のコマンドが`no such directory`的なエラーで失敗した場合は、`mkdir ~/.ssh`と入力してみましょう。
```bash:GitBash
cd ~/.ssh
ssh-keygen -t ed25519 -C "your email"
```
 > 例:
 > <xxxx>@xxxxxxx MINGW64 ~/Desktop
 > $ cd ~/.ssh
 >
 > <xxxx>@xxxxxxx MINGW64 ~/.ssh
 > $ ssh-keygen -t ed25519 -C "your_email@example.com"
 > Generating public/private ed25519 key pair.
 > Enter file in which to save the key (/c/Users/<xxxx>/.ssh/id_ed25519):
 > Enter passphrase (empty for no passphrase):
 > Enter same passphrase again:
 > Your identification has been saved in /c/Users/<xxxx>/.ssh/id_ed25519
 > Your public key has been saved in /c/Users/<xxxx>/.ssh/id_ed25519.pub
 > The key fingerprint is:
 > SHA256:<xxxxxxxxxxxxxxxxxxxxxx> your_email@example.com
 > The key's randomart image is:
 > +--[ED25519 256]--+
 > |　　　　　　　　　|
 >  ~~ ~~ ~~ ~~ ~~ ~~ ~~
 > 　　　(中略)
 >  ~~ ~~ ~~ ~~ ~~ ~~ ~~
 > |　　　　　　　　　|
 > +----[SHA256]-----+

そしたら、生成したSSHキーをssh-agentに追加しましょう。
追加することで、パスフレーズを毎回入力する必要がなくなります。
※「Enter passphrase」と聞かれたら、鍵を生成時に使用したパスワードを入力しましょう
```bash:GitBash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh-add -l
```
 > <xxxx>@xxxxxxx MINGW64 ~/.ssh
 > $ eval "＄(ssh-agent -s)"
 > Agent pid xxxx
 > $ ssh-add ~/.ssh/id_ed25519
 > Enter passphrase for /c/Users/<xxxx>/.ssh/id_ed25519:
 > Identity added: /c/Users/<xxxx>/.ssh/id_ed25519 (your_email@example.com)
 > $ ssh-add -l
 > 256 SHA256:xxxxxxxxxxxxxx your_email@example.com (ED25519)

GitBashの方の操作はいったんこのコマンドで最後です。
公開鍵の内容をクリップボードにコピーしましょう。
```bash:GitBash
clip < ~/.ssh/id_ed25519.pub
```



次は、GitHubの方にコピーした公開鍵をアップロードする必要があります。
このURLにアクセスして、画面上部、緑色の「New SSH key」のボタンをクリックしましょう。

https://github.com/settings/ssh

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/b13c5b89-74d1-1d78-d18d-056b0103de12.png)

Titleには何かわかりやすい名前を、キータイプはそのままで、Keyの部分に先ほどコピーした内容を貼り付けましょう。
TitleとKeyの入力が終わったら、「Add SSH key」ボタンをクリックしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/5a4b1305-32be-c43e-a6f6-b823c2d198b1.png)


さて、最後にSSHで接続できるか試してみましょう！
GitBashに戻り、次のコマンドを入力してください。
```bash:GitBash
ssh -T git@github.com
```
 > <xxxx>@xxxxxxx MINGW64 ~/.ssh
 > $ ssh -T git@github.com
 > Hi UserA! You've successfully authenticated, but GitHub does not provide shell access.

コマンドを入力した後に「Hi! <アカウント名> !」と応答が返ってきたら無事に成功です。
リポジトリにはHTTPSでも接続できますが、よりセキュアなSSHでの接続ができましたね！
ここまでお疲れ様でした。

 # 軽くハンズオン ~リポジトリの作成からプルリクエストまで~

最後に軽くハンズオンを実施して締めようかと思います。

ここまでの間で、
 - Gitをインストールする
 - GitHubアカウントを作る
 - GitHubにSSH接続する
の3つをこなしてきましたが、最後にリポジトリの作成からテキストファイルの追加まで一通りやっていきたいと思います！

まずはGitHubでリモートリポジトリを作成します。
こちらの [リンク](https://github.com/new) をクリックして以下の画面を開きましょう。

ではリポジトリを作成するために、リポジトリの名前を画像の赤枠の部分に入力しましょう。
画像では、「test_repo」という名前でリポジトリを作成しようとしています。
名前が決まったら、「Create repository」ボタンをクリックして作成しましょう。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/e2092072-706f-0732-48ac-5a4526c8700d.png)

「Add a README file」にチェックを入れてなければ、以下のような画面に遷移するはずです。
この段階でリポジトリの作成は終わっているのですが、今回はリモートリポジトリをローカル上に複製(clone)したいので、画像の赤枠のボタンをクリックして文字列をコピーしましょう。
画像の例では`git@github.com:yukke23/test_repo.git`という文字列をコピーしています。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/42c085e7-e178-59cd-bbc0-a1240c160c10.png)

ここで一旦、GitBashに操作を切り替えます。
リモートリポジトリをローカル上にクローンするために、GitBash上で以下のコマンドを入力します。

:::note info
GitBashを開く際は、リポジトリを作成してもいいディレクトリで開くようにしましょう。
DesktopかDocumentがおすすめです。
:::

```bash:Git Bash
git clone <コピーした文字列>
```

クローンすることができたら、以下のコマンドでリポジトリの中に入った後に、ファイルを追加しましょう。
```bash:Git Bash
cd <リポジトリ名>
echo "# test" >> README.md
```

コマンドが正常に動作していれば、リポジトリと同じ名前のフォルダ内に「README.md」というファイルが作成されているはずです。

今度は「ファイルを追加した」というリポジトリ内のデータの変更を確定しましょう。
以下のコマンドを実行してください。
1つ目のコマンドで、変更を確定する対象のファイルを選択しています。
今回はリポジトリ内の全ファイルを対象にしています。
2つ目のコマンドで、「変更を確定する対象のファイル」に指定したファイル群の変更を確定します。
変更を確定する際には、「どのように変更したか？」を表すコメントを付ける必要があるのですが、今回は「add file」というコメントを付けています。
```bash:Git Bash
git add .
git commit -m "add file"
```

最後に、ローカル上で確定した変更をリモートリポジトリにも適用しましょう。
以下のコマンドを実行してください。
```bash:Git Bash
git push 
```

操作をGitHubに切り替えて、ページを再読み込みすると以下の画面のようになっているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/fa6aecba-4ef2-9f2f-2bd2-a0700a94cf74.png)

無事に、追加したファイルを閲覧することができましたか？
これで、「リポジトリの作成からテキストファイルの追加まで」を実践することができたと思うので、まだまだ「基本のき」の字の1/3くらいですが終わりにしたいと思います！

もっと詳しい実践的なことは、いつか別の記事で解説できたらと思います。

 # さいごに

ここまで閲覧していただきありがとうございます！

初めてGit,GitHubについて学ぼうとすると、情報が多く面食らってしまいますよね...。
自分がそうで、モノにするのに2か月以上かかってしまいました。

今回はGitBashというCLI環境でコマンドを打つことをしましたが、
「Git GUI」や「GitHub DeskTop」、「souce tree」などGUI環境でGitを操作するツールも多々あるので、「CLI！黒画面怖い！」な人はこっちを触ってみるのもアリかと思います。

最後にお得情報なのですが、学生もしくは教員の方はGitHub Educationというプログラムに参加できるようで、めちゃめちゃ特典もらえるので、登録して損はないはずです！

https://qiita.com/Kobayashi2019/items/5adb9bde57691a770419

他にも、Git,GitHubを使いこなせれば損なことはほとんどないので、一緒にどんどんマスターしていきましょう！