『Git： はじめてのGitとGitHub』を受けてみて

# 『Git： はじめてのGitとGitHub』を受けてみて

## 背景・目的・読み手

### 背景
　[無料でも、ここまで学べるUdemy \- Qiita](https://qiita.com/fumimix/items/de7e1a15e33e33af274b#comments)にて[Git：はじめてのGitとGitHub（山浦 清透氏）](https://www.udemy.com/course/intro_git/learn/lecture/6449706)を紹介した。

　上記では概要にとどまったため、実際に受けた詳細について記載。

### 目的
　自分の学習用に上記講座の概要とまとめ。初心者向けのGit/GitHubに関する紹介。


### 読み手
　自分、並びにGitを全く知らずこれから学ぼうとされる方。


## 受講の感想
　講座は非常に分かりやすく、段階を踏んで講座が進み、1つの動画が数分で終わるため、途中でやめたり再開がやりやすい。
　講座の中でコマンドを一通り実行してくれるが、一通りの作業は自分でも実際に試す、コマンドのオプションを調べたりすることでより理解が深まるため、講座を見聞きするだけではなく、実際に手を動かすことを推奨したい。


## 講座メモ

### セクション1:Gitの世界へようこそ

- Gitの利便性
    - ファイルのバージョン管理システムとして必要な機能が揃っている
        - 日付やバージョンが付いたファイルが大量に残るのを防ぐ
        - 誰かが誤って共有したファイルを上書きするのを防ぐ
        - 変更履歴を残せる
        - 何かあったら前のバージョンに戻すことができる

- Gitの仕組み
    - リポジトリは「変更履歴を貯める場所」。個人リポジトリ・共有リポジトリがある
    - commitは個人リポジトリに変更履歴を記録
    - putは共有リポジトリに変更を共有
    - pullは共有リポジトリの変更を個人リポジトリに同期

- GitHubとは
    - Gitリポジトリのホスティングサービス
    - ほかの人からのプルリクエストにより複数人開発が可能
        - 自分が公開したコードを見て、世界中の開発者から修正提案が来ることも
    - 公開・非公開リポジトリ
        - 公開リポジトリ：無料
        - 非公開リポジトリ：有料
            - 制限があるけど非公開リポジトリを無料で作りたかったらBitbucketというサービスもあるよ

### セクション2:事前準備
　自分のPCにGitをインストールしてくるところから、自分のGitHubのアカウント情報を登録するところまで。

　Windows / Mac OS X とも、ダウンロードサイトからダウンロード及びインストールとなる。

- [Git \- Downloading Package](https://git-scm.com/download/mac)
- [Git for Windows](https://gitforwindows.org/)

　ちなみにWindows版Gitを導入した後のバージョンアップは、Git Bashを立ち上げた後、`git update-git-for-windows`コマンドにてバージョンアップが可能。

```GitBash:コマンド入力例
$ git version
git version 2.23.0.windows.1                                             <--- バージョン確認

$ git update-git-for-windows
Git for Windows 2.23.0.windows.1 (64bit)
Update 2.30.0.windows.2 is available
Download and install Git for Windows 2.30.0(2) [N/y]? y                  <--- yでバージョンアップ開始
```

　初期設定としてGitHubのアカウントを登録した後、GitBash上でGitHubのアカウント情報を登録する。

```GitBash:GitHub登録情報の確認
$ git config --global user.name <GitHubのユーザ名>
$ git config --global user.email <GitHub登録メールアドレス>
```

　gitへのGitHubユーザー情報登録のあと、正しく登録されたか確認をしておくこと。

```GitBash:GitHub登録情報の確認 
$ git config --global --list
winupdater.recentlyseenversion=2.30.0.windows.2
user.name=<GitHubのユーザ名>
user.email=<GitHub登録メールアドレス>
```

### セクション3:GitとGitHubの基本的なワークフロー

#### プロジェクトを新規作成or既存のプロジェクトを登録

　```git init```でリポジトリを作成できる。ディレクトリを作っていない場合も作成可能。動画の方法以外にもディレクトリを指定することもできる。

- ```git init```
    - カレントディレクトリにリポジトリを作成。動画の手順がこれ。既に存在するフォルダに移動し、このコマンドを実行する流れ
- ```git init <ディレクトリ名>```
    - 指定したディレクトリに対するリポジトリを作成
- ```git init hoge```
    - hoge用リポジトリを作成。hogeディレクトリに.gitディレクトリを新規生成

　作業のたびに```git status```で状況を確認していくため、このコマンドも覚えておくとよい。

#### ファイルの登録・変更

　ワークフロー（ファイル登録の流れ）は次のような流れになる。add（ステージングエリア）　→　commit（ローカルリポジトリ）　→　push（リモートリポジトリ）
　手順・コマンドについては動画の通り。pushの方法はhttpsとsshがあるため、sshによるpushが指定されている場合は、手順が異なるため注意すること。sshによるpushは[Gitコマンド〜SSH接続でリモートリポジトリにプッシュしてマージするまで〜](https://qiita.com/KKKeisuke/items/8327c60a64f5e1de1857)など参照のこと。

　変更の際の主なコマンドは次の通り：

- ```git add .```
    - すべての変更をステージングリポジトリに追加
- ```git add <ファイル名>```
    - ステージングリポジトリにファイル名を指定してファイルを追加した場合
- ```git remove```
    - ファイルを削除したい場合

　変更の流れもadd→commitで同じだが、コミットメッセージを追加しなぜ変更したかが他の作業者にも分かるようにしておく。プロジェクトごとにメッセージの記載ルールがある場合はそちらに準ずる。何れの場合でもコメントの1行目を見ただけで変更の概要をつかめるようにしておくとよい。

#### 変更履歴の確認

　変更の履歴は```git log```で確認可能。```git log --oneline```で各変更コメントの最初の1行だけ連続して表示させることができ、非常に便利。このため、コメントの1行目を見ただけで変更の概要をつかめるようにしておくことが重要。

　add / commit前に変更点を確認しておくとよい。不要な変更までリポジトリに上げないようにするため。コマンドは次の通り：
- ```git diff```
    - 今の変更点とステージングの差分
- ```git diff```
    - ステージングとローカルリポジトリの差分
なお、講座で紹介されているオプション以外にも複数あるため、[忘れやすい人のための git diff チートシート](https://qiita.com/shibukk/items/8c9362a5bd399b9c56be)を振り返るとよい。

#### GitHubへpush
　最初に入力したコマンドは、実はGitHub上のリポジトリにoriginという名前を付けて登録するものになっている。

```GitBash:GitHubへの初回プッシュコマンド
$ git remote add origin https://github.com/<ユーザ名>/<プロジェクト名>
```

　ということで、講座の手順を順番に実施している場合、既にGitHub上のリポジトリがoriginという名前で登録されているため、以下のコマンドで登録が可能になる。

```GitBash:変化点をGitHubにプッシュ（2回目以降）
$ git push origin master
```

　このリポジトリ名はoriginをよく使うが、名前を変えて使うことも可能。

#### Gitの管理から除外するファイル
　.gitignoreファイルにファイル名やディレクトリ名を記載することでそれらのファイルやディレクトリを除外できる。
　共有したくない設定ファイル等をGitの管理から除外しておくとよい。

- ```git rm <ファイル名>````
    - 共有設定を解除しつつファイルも一緒に削除
- ```git rm  --cached <ファイル名>````
    - 共有設定のみ解除

　ファイルを戻す方法としては```git restore```も利用可能。最近増えたコマンドのため、[git switchとrestoreの役割と機能について](https://qiita.com/yukibear/items/4f88a5c0e4b1801ee952)も参照のこと。


## 上位コースについて

　上位コースとして「[Git： もう怖くないGit！チーム開発で必要なGitを完全マスター](https://www.udemy.com/course/unscared_git/#overview)」がある。結構お値段がかかるが、この無料講座を最後まで受講することで1,610円で受講することが可能なので、こちらのコースを受講するつもりの方は、先に本無料コースを受講しておくことをお勧めする。



## 役立つリンク集

　勉強後の振り返りなどに活用いただくと良い：

- [こっそり始めるGit／GitHub超入門](http://www.atmarkit.co.jp/ait/series/3190/)
- [私家版 Git For Windowsのインストール手順](https://opcdiary.net/?page_id=27065)