初めてのGitインストール～コミットまで【Windows編】

ネットで調べながらGitでコミットできるまで挑戦したら２～３時間程、苦戦したので同じステップを踏まないためにメモします。Windows10編

### 流れ

1.  [事前準備](#事前準備)
2.  [SSHまわり](#sshキー取得)
3.  [GitHubアカウントまわり](#githubのアカウントに公開鍵を登録)
4.  [Gitまわり](#さあいよいよgitを使おう) 




# 事前準備

1. インストールについては割愛。[一応リンク](https://gitforwindows.org/)

2.インストールできたら、Git Bash起動。




## 最初にやること

まずはインストールできてるか確認

```bash
$ git --version
git version 2.25.1.windows.1
```



##### ユーザ名とメアドの設定

```bash
$ git config --global user.name "ユーザ名"
$ git config --global user.email メアド
```

設定できたか以下のコマンドで確認

```bash
$ git config --list 
...
...
user.name= ユーザ名 
user.email= メアド
```



## SSHキー取得

リモートリポジトリとやり取りするためにSSHのカギが必要らしい。

#### SSHキー作成

※GitHubに登録しているEmailアドレスを使うのが一般的らしい

```bash
$ ssh-keygen -t rsa -b 4096 -C "メアド"
```

SSH Keysの保存先を聞かれているので、特に気にしなければそのままEnterを入力。

```bash
Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
```

ここで生成されるファイル名は上記のコマンドなら

`id_rsa`と`id_rsa.pub`のはず。それ以外ならおかしい。自分は暗号のようなファイル名になったので何回かやり直した。

[＊よくわからんファイル出ても削除すれば問題なし。](https://t-hsn.com/tech/201907/gitlab-sshkey/)



#### パスフレーズ入力

```bash
Enter passphrase (empty for no passphrase): [Type a passphrase] # Enter same passphrase again: [Type passphrase again]
```



＊ちなみに、色々な記事で、生成されたファイルにパーミッション設定するよう言われる（`chmod 600`のコマンド）が**Windowsの場合いらない**↓

[参照]: https://ja.stackoverflow.com/questions/44239/chmod-で-パーミッション-の変更が出来ない

> Windowsで`chmod`は実行できないと書きましたが、元々Windowsでは他のユーザアカウントのデータは(管理者権限が無い限り)見えないようアクセス制御されていますので、「秘密鍵のパーミッション変更」は実行しないままで大丈夫です。

#### 

#### SSHのconfigファイル設定

GitHubへSSH接続する際に、どの秘密鍵を指定するのかを管理するのが目的。以下の内容を`.ssh/config`(拡張子なし)に記述。なければ作る。

```vim
Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa
```



## GitHubのアカウントに公開鍵を登録
アカウント持ってなければ作る。ここも割愛。一応リンク↓
[How people build software · GitHub](https://github.com/)

### リポジトリ作成

＊リポジトリ持ってたら大丈夫



アカウント作ったらリポジトリ作成。
​	自分のアカウントのページ行ってリポジトリのタブでNew押す。

1. ​	リポジトリ名書いて
2. ​	Public or Private 選択
3. ​	Initialize this repository with a README　に任意でチェック入れたら
4. ​	Create repository　クリック
![20170130132949.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571578/62c85c5c-210a-bb52-c526-52a408f04926.png)

​	

### 公開鍵を登録する

1. `id_rsa.pub`の中身をコピー

2. 右上のメニューから Settings を選択

3. gitのプロフィール画面の左側メニュー[SSH and GPG keys](https://github.com/settings/keys)の
![20170130132834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571578/b3d3a4c3-0b2d-9c5b-8995-991183aa0cc3.png)

4. New SSH keyをクリックして登録

   ー「Title」はPC名とか自分がわかりやすいやつで

   ー「Key」には、先ほどコピーした公開鍵の値をそのまま貼り付けます。

   で、「Add SSH key」をクリック

これでSSH接続の設定おわり



## SSH接続できるか確認

SSHの`config`ファイルを設定したので、以下のように「`github`」と指定するだけで、記載したホスト名、ユーザー名、秘密鍵が自動的に使われます。

```bash
$ ssh github
```

以下のようなやつでたら、[GitHub's SSH key fingerprints](https://help.github.com/articles/github-s-ssh-key-fingerprints/)にあるfingerprintsと一致するのを確認したら`yes`

```bash

The authenticity of host 'github.com (52.69.186.44)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
``


Hi username! You've successfully authenticated, but GitHub does not # provide shell access.
```
これがでればOK

### 番外編
`ssh-add`でマシンに鍵登録
`git push`とかするたびに毎回パスワード聞かれるなら以下のコマンド

```bash

$ eval `ssh-agent`
$ ssh-add keyのパス（デフォルトは~/.ssh/id_rsaだと思う）
```

# さあ！いよいよGitを使おう

作業ディレクトリ作成

```bash

$ mkdir git
$ cd git
```


おっと、ここで初心者の私が即席で調べて理解したgitの作業イメージを共有して進めたほうが親切そうだな



## 作業イメージ

**ローカルリポジトリ**（自分のパソコン内のリポ）と**リモートリポジトリ**（ネット上のリポ）ってのがあって

**ステージング** : どれを保存するか選ぶ
**コミット**：ローカルに保存
**プッシュ**：サーバに保存
**マージ**：Masterに更新

<img width="600" alt="無題.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571578/a2ee7b37-185a-3713-b77c-95b1a1018777.png">

ちなみに
**プル** : サーバからデータをローカルにロードする



（何か違えば教えてください）



## リポジトリをローカルにCloneする

リポジトリをさっき作った作業ディレクトリ（ローカル）にクローンする。

GitHubのリポジトリのページから **Clone or download** をクリックして、今回は **Use SSH** を選択。

「`git@github.com:【ユーザー名】/【リポジトリ名】.git`」という文字列をコピー
![20170130132923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571578/1acf8a65-05d4-1e69-ac5d-b490b1ce1285.png)


コピーしたやつを書きコマンド `git clone` のあとに張り付けてCloneする

```bash

$ git clone git@github.com:【ユーザー名】/【リポジトリ名】.git 
Cloning into '【リポジトリ名】'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done.
```

これで自分のディレクトリにファイルが入ってる



お次はリポジトリに移動してそのまま編集してコミットまでしたい気持ちはあるが、通常はMasterブランチにコミットすることはなく、ローカルで作業用の**ブランチ**を作って、そこで弄ったものをローカルで保存（**コミット**）してサーバにあげる（**プッシュ**する）らしいのでそれをやる。



## ブランチ作る

```
$ cd 【リポジトリ】　　　　　　　　　#リポジトリのディレクトリへ移動
$ git checkout -b ブランチ名       #開発用のブランチを作成
Switched to a new branch 'ブランチ名'
```



＊リポジトリのディレクトリの中には管理したいファイルを置いとく。以下で確認。

```bash

$ ls -l
```



## ファイルをステージング

コミットしたいやつをステージング

```bash

$ git add 対象ファイル 
```

＊ちなみに取り消したいときは

```bash

$ git reset HEAD 対象ファイル
```



## ローカルにコミット

ステージングされたやつをローカルに保存

コミットメッセージはおまかせ

```bash

$ git commit -m "コミットメッセージ"
[develop 77a190e] test commit
 1 file changed, 46 insertions(+), 5 deletions(-)
```



## GitHubにプッシュ

下記コマンドでGitHubにプッシュします。



```bash

$ git push -u origin ブランチ名

#パスワードうったりして、なんか表示される

 * [new branch]      ブランチ名 -> ブランチ名
Branch 'ブランチ名' set up to track remote branch 'ブランチ名' from 'origin'.
```

これがでたらおわり。

あとはGitHubを見に行ったら更新されてるのを確認。
お疲れ様です。