これだけはできてほしいgitとGitHub

## はじめに
これができればチーム開発に参加できます！\
最低限のGitとGitHubの使い方を学ぶことができます．私が普段使うコマンドをまとめて説明します．
基本的に，コピペで実行できます．エラーがあればissueに書いてください．

## 目次
1. クローン
2. git管理
3. sshでのGitHub
4. GitHubへ保存する
5. 変更をGitHubへ反映する
6. 他の人の変更を取り込む
7. ブランチを使って開発する
8. gitignore

## 環境
- Host: MacBook Pro 14 inch
- OS: macOS Sequoia 15.1
- Shell: zsh 5.9

linuxでも同様にできます．Windowsの場合はGit Bashを使ってください．
Git Bashのインストール方法は次の記事を参考にしてください．
[WindowsにGit Bashをインストールする](https://qiita.com/suke_masa/items/404f06309bb32ca6c9c5)

## 1. クローン
### 1-1. リポジトリのクローン
これができれば天才の開発したコードを使うことができます．\
まずは，このリポジトリをクローンしてみましょう．
以下のコマンドをターミナルに入力してください．

```zsh
git clone https://github.com/tomoswifty/learn-git.git
```

すると，今いる場所に`learn-git`というフォルダが追加されています．

### 1-2. ブランチを指定してクローン
公開されているコードには，ブランチで分けられている場合があり自分の環境に合わせたバージョンのコードになっている必要があります．\
そこで，複数のバージョンを公開する場合によく用いられる方法として複数のブランチが公開されています．

```zsh
git clone -b dev https://github.com/tomoswifty/learn-git.git
```

これで，指定したブランチのリポジトリをクローンできます．先ほどのmainブランチではなく，`dev`ブランチが追加されています．

ブランチの確認は以下のようにすると，存在を確認できます．
```zsh
git branch
### 実行結果
* dev
  main
```



特にこのリポジトリは必要ありませんので，削除して構いません．

## 2. git管理
### 2-1. ファイルの作成
まずはgit管理したいファイルを作成します．
`learn-git`というフォルダを作成して，その中に`test.txt`というファイルを作成しましょう．

```zsh
mkdir learn-git
cd learn-git/
touch test.txt
```
`text.txt`に`Hello, World!`と記入しましょう．

```zsh
nano test.txt
```
#### nanoエディタの使い方
`ctrl + x`→`y`→`Enter`で保存して終了です．

<div style="display: flex; justify-content: space-between;">
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/038fce26-9ec4-24a7-76cc-c0bb0e35578f.png" width="32%" alt="nano1">
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/6558f238-3509-e919-bffe-2d14a94acccf.png" width="32%" alt="nano2">
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/c3781de6-ada2-dfd3-0df4-28cfb813b528.png" width="32%" alt="nano3">
</div>



> `nano`が使えない場合はインストールしましょう．
> ```zsh
> brew install nano
> ```
> もしくは`vim`など他のエディタを使ってください．

ここで，ファイルを確認しましょう．
```zsh
ls -a
```

このように表示されているはずです．
```zsh
$ ls -a
.		..		test.txt
```

次にファイルの中身を変更しましょう．
```zsh
cat test.txt
```
このように表示されていれば成功です．
```zsh
Hello, World!
```

### 2-2. git管理に追加
```zsh
git init
```
これでgit管理されます．
以下のように表示されれば成功です．
```zsh
$ git init
Initialized empty Git repository in /Users/{YOUR USERNAME}/learn-git/.git/
```

### 2-3. 変更のステージ
コミット前に必要なおまじないです．
```zsh
git add -A
```

### 2-4. 変更をコミット

```zsh
git commit -m "first commit"
```
これがコミットです．
変更が保存されます．
## 3. sshでのGitHub
sshでGitHubにアクセスする方法を紹介します．
### 3-1. sshキーを生成
```zsh
cd .ssh
```
このとき，`.ssh`がなければ作成します．
```zsh
mkdir .ssh
```
ssh鍵を生成します．
```zsh
ssh-keygen -t rsa 
```
作成できたか確認します．
```zsh
ls -a
```
このように,`id_rsa`と`id_rsa.pub`が表示されていれば成功です．
```zsh
$ ls -a
.		id_rsa
..		id_rsa.pub
```

公開鍵を確認します．

```zsh
cat id_rsa.pub
```
この中身をコピーします．

### 3-2. GitHubにsshキーを登録
GitHubにsshキーを登録します．

GitHubにログインし，右上のアイコンから「Settings」を選択します．

![GitHubでsshキーを登録](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/36cefb40-72f2-f2e7-5b45-636ed572036e.png)

左のメニューから「SSH and GPG keys」を選択します．

![GitHubでsshキーを登録](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/9a8cf752-515d-7b16-3ffc-0cee314d408d.png)

「New SSH key」をクリックします．

![GitHubでsshキーを登録](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/7cf66a7f-b0c9-1274-71b1-af31bf2422c0.png)

「Title」に任意の名前を入力し，「Key」に先ほどコピーした公開鍵を貼り付けます．

「Add SSH key」をクリックして登録完了です．

![GitHubでsshキーを登録](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/c7fc8ce4-3505-4e8b-5820-0ab6057a99b2.png)

これで，sshキーの登録は完了です．


## 4. GitHubへ保存する
### 4-1. GitHubにリポジトリを作成
GitHubにリポジトリを作成します．\
ブラウザからGitHubにアクセスしてサインインします．
この画像のように，緑色の「Create repository」ボタンをクリックしてリポジトリを作成します．

![GitHubでリポジトリを作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/1eba1747-9a6b-0465-3e58-6a3e93147156.jpeg)

リポジトリ名は「learn-git」とします．
「Public」を選択し，「Add a README file」のチェックは外します．

![GitHubでリポジトリを作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/934917c8-885d-8c4a-1450-e9f722f6f9d3.jpeg)

作成したら，以下のような画面が表示されます．

![GitHubでリポジトリを作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/61ce85b7-a832-8fb7-d77b-38c426fd29b8.jpeg)

ここのQuick setupのSSHをクリックします．
以下のような画面が表示されます．
前章で作成したsshキーを使ってこのリポジトリにアクセスします．

![GitHubでリポジトリを作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/17c17374-cabe-d3d0-120c-6f192ca5f7aa.png)

この画像にあるコマンドを次章で実行します．

### 4-2. remoteにリポジトリを追加
ターミナルへ戻ります．

commitまでは完了していますので，次はリモートリポジトリを追加します．
その前に，おまじないです．
```zsh
git branch -M main
```
これは，ブランチ名をmainに変更するコマンドで，昔はmasterという名前でした．転換期に必要なコマンドでしたが最新版のgitではデフォルトでmainになっているので不要ですが，念のため実行しておきます．

そして，リモートリポジトリを追加します．
```zsh
git remote add origin git@github.com:YOUR_GITHUB_USERNAME/learn-git.git
```
ここで，`git@github.com:YOUR_GITHUB_USERNAME/learn-git.git`の部分は，先ほどGitHubで作成した自身のリポジトリのURLに変更してください．

### 4-3. GitHubへpush
```zsh
git push -u origin main
```
これでGitHubへpushできました．
```zsh
$ git push -u origin main                                      
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 228 bytes | 228.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:YOUR_GITHUB_USERNAM/learn-git.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.
```

GitHubのページをリロードして，リポジトリが更新されていることを確認してみましょう．

![GitHubでリポジトリを作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/59d6da84-afe1-4381-bf16-1b373b96172a.png)

## 5. 変更をGitHubへ反映する
### 5-1. ファイルを変更する
```zsh
nano test.txt
```

### 5-2. ローカルでコミットする
```zsh
git add -u
git commit -m "add a comment"
```

### 5-3. GitHubへpush
```zsh
git push -u origin main
```
4章と同様に，GitHubのページをリロードして，リポジトリが更新されていることを確認してみましょう．
変更が反映されていれば成功です．
コミットメッセージも変更されているはずです．

## 6. 他の人の変更を取り込む
### 6-1. ファイルの変更
GitHubのページで変更を加えます．\
GitHubのページで「Add a README」をクリックします．
![github_commit1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/a4ed0b50-2771-d76d-5a87-d428ba24879d.png)

タイトルを記入して「Commit changes」をクリックします
![GitHubで変更を加える](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/02bef14a-c55f-8a7c-845e-104d9162d4b9.png)

コミットメッセージを確認して，「Commit」をクリックします．
<div style="display: flex; justify-content: space-between;">
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/9fae4c3a-922b-e313-a776-734217fe3db9.png" width="35%" alt="github_commit3">
</div>

これで，GitHub上で変更が加えられました．
![GitHubで変更を加える](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3374774/3879168e-8a44-846c-6f7e-23ee1f229640.png)

### 6-2. ローカルへpull
```zsh
git pull origin main
```

```zsh
$ ls
README.md	test.txt
```
となって変更を取り込むことができました．

## 7. ブランチを使って開発する
### 7-1. ブランチを作成する
```zsh
git branch dev
``` 
### 7-2. ブランチをpushする
```zsh
git push origin dev
```

## 8. gitignore
いらないファイルをgit管理から除外することができます．

git管理から外すファイルを作成してみます．
```zsh
touch dummyfile.txt
```

macOSでは`.DS_Store`がたびたび作成されます．
わざわざpushする必要はないので，`.gitignore`に追加しましょう．
```zsh
nano .gitignore
```
```.gitignore
.DS_Store
dummyfile.txt
```
これでpushしてみましょう．
すると，リモートリポジトリにはdummyfile.txtが反映されていないはずです．


# おわりに
これでひととおりGitとGitHubを使うことができるようになったと思います．

# 参考文献
- [GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)

- [[Git]これだけ押さえる！gitconfigの基本](https://qiita.com/C_HERO/items/c35e679f0b03a5f06469)