Git / GitHub の使い方演習【MacOS 10.15 Catalina】

Git / GitHubの使い方の勉強過程をまとめてみました。

OS環境：MacOS 10.15 Catalina (MacOS 12.6 Montereyでも確認)
git環境：git version 2.37.0

# 1. HomebrewからGitをインストールする
### 1.1 Homebrewを最新にする


``` shell:homebrewのアップデート
$ brew update  #homebrewのupdate
$ brew -v  #version確認 
```
brewが通らない人は``export PATH="$PATH:/opt/homebrew/bin/" ``を.bash_profileに書き込んでね(bashの場合)


### 1.2 gitをインストールする

``` shell:gitのインストール
$ brew install git  #gitのインストール
$ git --version  #バージョン確認
```

# 2. Gitのパスをインストール
### 2.1 使用中のシェルを確認
```shell
$ echo SHELL  #使用中のシェルを確認(bash oe zsh)
```

### 2.2 シェルに合わせたパスの追加

```shell
$ sudo vi ~/.zshrc  #zshの場合
$ sudo vi ~/.bash_profile  #bashの場合
#パスの設定
export PATH=/usr/local/bin/git:$PATH
#シェルの再起動　
$ exec $SHELL -l
#gitのバージョン確認 
$ git --version
```
viエディタについて 
Escで閲覧モード、aやiで挿入モード
閲覧モード時に :wqで保存終了 

# 3. パスワード等の設定

```shell
git config --global user.name 'xxx'
git config --global user.email 'xxx'
```



# 4. SSH接続の設定　

### 4.1 秘密鍵を作成する
.sshフォルダがない場合は作成する

```shell
# カレントディレクトリをhomeに
$ cd
# 隠しフォルダを確認
$ ls -a 
# ここで.sshディレクトリがない場合は作成 
$ mkdir .ssh
```

ssh-keygenコマンドで公開鍵と秘密鍵を作成 

|オプション名  |説明  |
|---|---|
|-t  |作成する鍵の暗号化形式を「rsa」（デフォルト）、「dsa」「ecdsa」「ed25519」から指定する  |
|-b  |作成する鍵のビット数を指定する（RSA形式の場合、デフォルトは2048bit）|
|-C  |コメントを指定する（デフォルトは「ユーザー名@ホスト名」。「-C ""」でコメントを削除）|

コマンド実行時に、保存フォルダおよびパスフレーズを聞かれますが、入力せずにEnterを押すとそれぞれ ~/.sshディレクトリと、パスフレーズなしに設定されます。

```shell
$ cd ./.ssh
# ed25519で作成する場合
$ ssh-keygen -t ed25519 -C メールアドレス
# rsaで作成する場合
$ ssh-keygen -t rsa -b 4096 -C メールアドレス
```

ed25519の場合は 
id_ed25519 (秘密鍵)
id_ed25519.pub (公開鍵)

rsaの場合は
id_rsa (秘密鍵)
id_rsa.pub (公開鍵)
が作成される

### 4.2 公開鍵の方の内容を登録する 

gitHubのSettings > SSH and GPG keys > New SSH keyにコピー&ペーストで貼り付ける。 
(ssh 以下、メールアドレスまで全て貼り付ける)

### 4.3 接続確認 
```shell
$ ssh -T git@github.com
# パスフレーズを設定している場合は入力を求められる
```

### 4.4 (補足)pushの際にパスフレーズを求められないようにする
`ssh-add`でSSH鍵を`ssh-agent`に登録する
```shell
$ ssh-add 秘密鍵ファイルのパス
# 登録されていることを確認
$ ssh-add -l
```
`~/.ssh/config`にSSH鍵のパスフレーズを記憶するように設定する
```shell:config
# common
Host *
 UseKeychain yes
 AddKeysToAgent yes
```

# 5. 実際のリモートへのpushまで 

### 5.1 gitでローカルにリポジトリを作成 

```shell 
# gitを始める
$ git init
# フォルダ内のファイルを確認する 
$ ls -a
# うまくいっていれば .git ディレクトリができている
```

### 5.2 githubでリモートにpushする 
初めはREADMEや.ignoreを作成するオプションはなくてOK。 
開始時に使用するコマンドが出てくるので、そのまま入れていく。 

```shell
# マスターブランチの名前を確認
$ git branch
# "master"と出てきた場合は、以下でmainに変更する
$ git branch -M main
$ git branch #確認
```

次に、リモートの保存先リポジトリを設定する
```shell
# リポジトリに接続(originが指定したリポジトリになる)
$ git remote add origin git@github.com:***/***.git
# 確認
$ git remote -v
# pushするbranchを指定
$ git push -u origin main
```

ここまで設定したら、あとは実際のpush
```shell 
# 変更をaddしていく
$ git add . #全てのファイルの変更をadd
# ローカルでcommitする
$ git commit -m "コメント"
# リモートにpushする
$ git push
# 現在の状態を確認
$ git branch -vv
```

# 6. リモートにアップロードしたくないファイルについて
+ ローカルフォルダ内に .gitignore ファイルを作成
+ 中に除外したいファイルの名前を書く
+ 正規表現で拡張子指定、ディレクトリ指定で下層のファイルをまとめて指定などもできる 


# 7. branchの管理について
ブランチ管理のコマンド一覧
|コマンド |説明 |
|--- |--- |
|git branch|ブランチの確認|
|git branch \<new> |新規ブランチ作成|
|git branch -m \<old> \<new>|ブランチ名変更|
|git branch -d <ブランチ名>|ブランチの削除|
|git switch <ブランチ名>|ブランチを切替|
|git switch -c \<new>|新規ブランチ作成＋切替|

branchからのpushは、初めリモートのブランチ名を指定してのpushが必要になります
```shell
# ローカルとリモートのブランチの確認
$ git branch -vv
## * main ******* [origin/main] *** のように表示される
# push先を指定してpush
$ git push origin/<ブランチ名>
```

# 8. プルリクエストについて
### 8.1 github側(リモート)でマージ
+ branch表示画面または"Pull requests"タブの"Compare & pull request"を選択
+ baseとcompareのbranchを選択し、"Create pull request"を選択
+ Conflictのチェック結果が表示される
    + なければ"Merge pull request"、"Confirm merge"でmergeできる(closeする)

### 8.2 ローカル側でマージ
mergeされたいブランチ側にいる状態で、`git merge 比較するブランチ名` でmergeできる。

:::note
mergeされたいブランチ　← 比較するブランチ
:::

:::note warn
コメントを求められる時はviエディタで追記すればよい
+ aまたはiで入力モード
+ escで操作モード
+ :wqで保存し終了
:::