【サポーターズ主催】GitとGitHubの勉強会まとめ

# はじめに
こんにちは、OhaGiです。
サポーターズ主催のこちらの勉強会に参加しました。
Git、GitHubは以前から使用していましたが今回改めて体系的に学べたのでその内容をまとめてみます。

https://talent.supporterz.jp/events/194c18ed-0e7f-4858-809d-07e5e7a72c47/

# Gitとは
オープンソースの **分散型バージョン管理システム** の一種。

:::note
 **バージョン管理** とは
 ファイルを誰が・いつ・どんな変更をしたか、変更履歴を記録すること。
 変更差分の確認やファイルの復元等が行える。
:::


:::note
 **分散型** とは
 ユーザーのPCにローカルリポジトリを作成してそれにファイル変更履歴を記録する方法のこと。
 必要に応じてリモートリポジトリに反映させることが可能。
 サーバに接続出来ない場面でも開発が出来る上、複数人数での開発に向いている。
![リモートリポジトリ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/dc374d00-83cb-899d-0627-6048e2981702.png)
:::

# GitHubとは
 GitをWebサービスとして提供している **ソフトウェア開発のプラットフォーム** 。
 前述のバージョン管理機能や、コードレビュー機能、issuesを使ったタスク管理機能など、多くの機能を持つ。
 ユーザー数1億人越えの超人気サイトであり、学生のチーム開発から大手企業まで幅広いシーンで使用されている。
# GitHubを用いた開発の流れ
## 1.リモートリポジトリを作る
GitHubから `New` → リポジトリ名の入力と公開設定、Readmeファイルを追加するかを選択→ `Create repository`
![リモートリポジトリ作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/f1930802-523a-0dae-d2dc-a2efcb10fbc4.png)
## 2.ローカルリポジトリを作る(clone)

:::note 
 **clone** | 作成したリモートリポジトリをローカルにコピーすること。
:::

エクスプローラー等で作業ファイルを作成 → ターミナル上で 
```
cd cloneしたいファイルへのパス
```
を入力。
GitHubで作成したリポジトリのページから `<>code` タブ →緑色の `<>code` ボタンからキーをコピー
![clone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/786a5636-7f2f-1167-cfd6-d842836c3484.png)
ターミナル上で
```
git clone コピーしたキー
```
を入力。

cloneしたローカルリポジトリに移動しておく。
```
cd ディレクトリのパス
```
## 3.issue作成

:::note 
 **issue** | メンバー間での確認事項などスレッド形式で共有出来る機能。進捗状況の管理などが可能。
:::

GitHubのページから `Issues` タブ →緑色の `New issue` ボタン → タイトルを入力して`Submit new issue` でissueを作成
![issues.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/b5b7401d-601c-f8cb-5382-f71c7a0af94b.png)

## 4.branch作成

:::note 
 **branch** | 履歴を枝分かれさせたもの。
 branchの元のコピーをそのまま取ってそこで作業が出来る。
 issueを立てたときに作ることが多い。
:::

GitHub上の`Issues`タブから`Create branch`ボタンを押してブランチ名を入力して作成。
![createBranch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/ecb6ae8f-58ff-3a71-3cdf-ee6770781684.png)

## 5.fetch

:::note 
 **fetch** | リモートリポジトリから最新の状態を取得する操作。ただし、まだローカルのブランチには反映されていない。
:::

ターミナル上で
```
git fetch origin
```
を実行。
## 6.branchを移動
ローカルではまだ作成したbranchに移動できていないため **チェックアウト** (移動)する必要がある。
`git branch -r`：リモートリポジトリのブランチを一覧表示する。
`git branch`：ローカルリポジトリのブランチを一覧表示する。
```
git checkout ブランチ名
```
でブランチを移動。
## 7.コードを記述
コードをひたすら書く

## 8.ステージング

:::note 
 **ステージング** | commitするファイルを選択すること。
:::

ターミナル上で
```
git add ステージングするファイル名
```
を実行。

## 9.commit

:::note 
 **commit** | 変更内容をローカルリポジトリに記録すること。
 GitHubでは、コミットしたタイミングに変更を戻すことが出来る。ゲームのセーブ機能をイメージすると分かりやすいかも。
:::

ターミナル上で
```
git commit -m コミットのメッセージ
```
を実行。
`-m`はコミットのメッセージを追加するオプション。
## 10.push

:::note 
 **push** | fetchに加えて、リモートからの変更をローカルに反映する操作のこと。
:::

ターミナル上で
```
git push
```
を実行。
## 11.pullrequest

:::note 
 **pullrequest** | レビューやmergeを行うためのリクエストを送る機能。
:::
GitHub上で`New pull request`ボタン
![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/2c1446a8-2bbb-703f-1969-e18bd6f2483b.png)
プルリクエストのタイトル、レビュワー等を入力して作成。
![pullRequest2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/d31e847d-c1e2-2c17-da39-c4fc11dc50f5.png)

## 12.レビュー
チーム開発などの場合、GitHubのコード比較機能を使用してレビューを行う。
## 13.merge

:::note 
 **merge** | 変更内容を統合すること。リモートリポジトリ上のブランチからメインのブランチに反映させることが多い。
:::

![merge](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/56fc8701-3909-7791-5376-231113797a62.png)

GitHub上で`Merge pull request`ボタン → `Confirm merge`ボタンをクリック。
## 14.pull

:::note 
 **pull** | リモートリポジトリの変更内容をローカルリポジトリに反映させること。
 fetchとmergeをするイメージ。
:::

```
git checkout ブランチ名
```
でpullするブランチにチェックアウトしてから
```
git pull
```
を実行。
これで、ローカルリポジトリが最新状態に更新される。
# 最後に
以上が今回の勉強会のまとめです。前回のチーム開発ではIssueを活用しなかったため、今回それについて学べたことが特に大きな収穫でした。