GitHubの導入〜基本操作 for Windows

この記事のインストール方法や環境設定はWindowsユーザ向けです。Macユーザは各自、調べてください。(Windowよりかなり簡単にインストール・設定できます)
※各種設定等はオススメであり、各自で自由に変更してください。

##1. GitHubとは
GitHubとは、ソフトウェア開発プロジェクトのためのソースコード管理サービスです。

ソースコードを管理する時に、各プログラムが入ったディレクトリを更新するたびにコピーして、複数のディレクトリで管理している人がいるかもしれません。しかし、この方法では、以前のコードに戻ったり、差を比較するのが不便な時があります。（何よりダサいしスマートじゃない）

GitHubは公開されているソースコードの閲覧や簡単なバグ管理機能、SNSの機能を備えており、開発者にとって無くてはならないサービスです。

##2. インストール・環境設定
下記サイトからGit For WindowsのインストーラーをDLし、インストールします。

https://git-for-windows.github.io/

インストーラーをクリックしてインストールを開始します。
![git_1.png](https://qiita-image-store.s3.amazonaws.com/0/129407/202fda03-ecc5-07d8-51e3-5936bd70bc04.png)
ライセンスを確認して「Next」をクリック

![git_2.png](https://qiita-image-store.s3.amazonaws.com/0/129407/4a116c48-0ad6-0950-e01e-f27f674a70f1.png)
インストール先ディレクトリを確認されるので、Gitをクライアントとしてのみ使う場合にはできるだけこのままで進めます。

![git_3.png](https://qiita-image-store.s3.amazonaws.com/0/129407/2d729992-1411-e222-a167-226bba4f4464.png)
インストールの選択オプションが表示されるので、選択します。

Additional IconsはBashを起動するためのショートカットをどこに置くかなので、好みでに決めて下さい。DesktopにBashのショートカットを置くかはお好みです。

Use a TrueType font in all console windowsにチェックを入れてしまうと、bash以外の全てのコンソールウインドウのフォントがLucida Consoleに変更されてしまい、漢字などの多バイト文字は文字化けしてしまうので、チェックを入れてはいけません。

![git_4.png](https://qiita-image-store.s3.amazonaws.com/0/129407/993495c0-60b7-dc58-9d5d-bfe07c5b20be.png)
スタートメニューを追加されるか確認されるので、通常はこのままNextをクリックして先に進めます。

![git_5.png](https://qiita-image-store.s3.amazonaws.com/0/129407/b34831ce-97c9-d8a2-de31-2d0762208dc3.png)
ここは環境変数pathに何を追加するかを選択します。

通常は「Use Git from Windows Command Prompt」を選択して「Next」をクリックします。

![git_6.png](https://qiita-image-store.s3.amazonaws.com/0/129407/f318be40-da18-6f83-83df-8744c87b1bba.png)
レポジトリへのチェックイン、チェックアウト時の改行の取り扱いについてのオプションを選択します。
ここでは、Checkout as-is, commit as-isを選択して「Next」をクリックします。

![git_7.png](https://qiita-image-store.s3.amazonaws.com/0/129407/4e5d797a-b2d4-2eb7-46f8-6960589ad16f.png)
次にGit出使用するコンソールをCygwinで使用されているPuttyを使用するか、Windowsの標準コンソールを使用するか選択します。特にこだわりが無ければMinttyを選択しておくのが無難です。

![git_8.png](https://qiita-image-store.s3.amazonaws.com/0/129407/247962df-8def-e3e1-36c7-a62885d7928f.png)
上のEnable file system cachingはPCのリソースは多少消費する代わりにgit status時などでの応答速度を改善するfscacheキャッシュを有効にするかしないかオプションです。マシンリソースに余裕のある人はチェックを入れましょう。またON/OFFは以下の要領で可能です。

```zsh
git config --global core.fscache true 
```

![git_9.png](https://qiita-image-store.s3.amazonaws.com/0/129407/c961514b-b1c7-8064-40b9-65daf87a108b.png)
この画面が出ればインストールは完了です。

##3. 初期設定
####3-1. ユーザ情報の設定
Gitを使う前にユーザの情報をGitに設定しましょう。
コマンドプロンプトを立ち上げgitが正常にインストールされていることを確認します。

下記のコマンドを入力することで、gitにユーザ情報を設定します。プロジェクトで開発する際は必ず設定しておかないと、誰が更新したのかわからなくなります。

```zsh
git config --global user.name "Kenta Okuda"
git config --global user.email "kenta.okuda@example.com"
```

1行目は名前を入力します。（ローマ字）
2行目には連絡先メールアドレスを入力します。（普段使うアドレスを入力するようにしましょう）

####3-2. エディタの設定
コミットログを記述するエディタを設定します。

```zsh
git config --global core.editor 'vim -c "set fenc=utf-8"'
```

####3-3. カラーの設定
カラーを設定することでGitが見やすくなります。

```zsh
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
```

####3-4. Gitの初期化
Gitを導入するディレクトリに移動して、下記のコマンドを入力することで対象ディレクトリに.gitディレクトリが生成され、Gitが使えるようになります。この.gitディレクトリに管理するリポジトリデータが格納されます。

```zsh
git init
```

##4. Gitの基本操作

###4-1. add
`add`は編集したファイルをステージ領域(インデックス)ステージングするためのコマンドです。
Gitでは基本的に、ファイルをステージ領域と呼ばれる場所にファイルを登録します。ステージ領域とは、コミットする前の一時領域のことを示します。

```zsh
git add 'プッシュしたいファイル名'
```
ディレクトリに存在する全てのファイルをプッシュする場合は

```zsh
git add .
```
**.(コロン)**をファイル名に指定することでディレクトリ内の全ファイルを示します。

###4-2. commit
`add`によってステージングされたファイルをコミットという操作をすることで、リポジトリに記録されます。
コミットを実行すると、リポジトリの内では、前回コミットした時の状態から現在の状態までの差分を記録したコミット(またはリビジョン)と呼ばれるものが作成されます。
基本的にコミットは下記のコマンドで行います。

```zsh
git commit -m "commit message"
```

コミットメッセージには好きなメッセージを書くことができますが、変更の内容が分かりやすいメッセージを付けるようにしましょう。

コミットメッセージに詳細を書きたい場合は、コミット時に`-m`のコマンドを入力しないで、vimなどのエディタでコミットメッセージを書きます。コミットメッセージの基本的なフォーマットは以下の通りです。

`git commit` //Enter

1行目：変更内容の要約（タイトル、概要）
2行目 ：空行
3行目以降：変更した理由（内容、詳細）

日本語でも大丈夫ですが、リポジトリで統一するのがいいでしょう。

１行目のコミットの要約の前に**コミット種別**と呼ばれるものを書きます。これは、このコミットがどのような変更を加えたコミットなのかを把握するためのものです。

* add     : ファイルの追加
* fix     : バグ修正
* hotfix  : クリティカル(致命的)なバグの修正
* update  : 機能修正（バグではない）
* change  : 仕様変更
* clean   : 整理（リファクタリングなど）
* remove  : ファイルの削除
* upgrade : バージョンアップ

例

```zsh
[fix] Aボタンが反応しないバグを修正


コンポーネントの関連付けができていなかったのを修正
```

**これらの`add`と`commit`はローカルリポジトリでバージョン管理をするときのコマンドです。これはGitHubを使わなくてもできます。次はローカルリポジトリをリモートリポジトリ（GitHub）にプッシュする方法です。**

###4-3. pushコマンド
リモートリポジトリで自分の手元のローカルリポジトリの変更履歴を共有するには、ローカルリポジトリ内の変更履歴をアップロードする必要があります。

そのために、Gitではプッシュ(Push)という操作を行います。 Pushを実行すると、リモートリポジトリ(GitHub)に自分の変更履歴がアップロードされて、リモートリポジトリ内の変更履歴がローカルリポジトリの変更履歴と同じ状態になります。

リモートリポジトリにプッシュする前にリモートリポジトリに対して`add`を実行しファイルをステージングしなければなりません。リモートリポジトリへのaddは下記のコマンドで実行します。

```zsh
git remote add origin https://github.com/'ユーザID'/'リポジトリ名'.git
```
リモートリポジトリには`origin`という名前を付けるのが一般的です。

ステージングが終わったら、いよいよプッシュをします。プッシュのコマンドは以下の通りです。この際、GitHubのユーザ名やパスワードを聞かれることがありますので、登録通りに入力してください。

`git push -u origin master`

`origin`という名のリモートリポジトリに`master`ブランチの内容をプッシュします。ブランチについては後述しますが、ここでは`master`ブランチにしています。

これで、ローカルリポジトリの内容がリモートリポジトリにもコピーされました。

ちなみに、２回目以降のリモートリポジトリへのプッシュをする際

```zsh
git add
git commit -m "コミットメッセージ"
git push origin 'ブランチ名'
```
の３つのコマンドだけで大丈夫です。

##5.　クローン
既存のリモートリポジトリをローカルに落とすために使うコマンドです。
例えば、GitHubに公開されているリポジトリを自分のコンピュータへ落とすときに使います。

```zsh
git clone https://github.com/'ユーザID リポジトリ名'.git 'クローン先のディレクトリ名'
```

##6. プル
最新のリモートリポジトリを取得するために使うコマンドです。
以下の例では、ローカルリポジトリのmasterブランチにリモートリポジトリoriginのmasterブランチを取り込みます。

```zsh
git checkout master    // masterブランチに移動
git pull origin master // masterブランチにリモートリポジトリのmasterブランチをマージ
```

##7. フォーク

##8. プルリクエスト

##9. ブランチ
ブランチは別々の作業を並行して行うために利用します。各ブランチはmasterブランチから分岐させ、それぞれのブランチでは、全く別の作業を同時に実施できます。それぞれのブランチでの作業が終了したら、masterブランチにマージします。

![git_branch_1.png](https://qiita-image-store.s3.amazonaws.com/0/129407/c14d5ec6-0961-60bc-1173-e1525a3f84c8.png)

###9-1. ブランチの作成
ブランチは branch コマンドで作成することができます。

```zsh
git branch <branchname>
```

引数を指定せずにbranchコマンドを実行すると、ブランチの一覧を表示することができます。頭に * のついているのが現在のブランチです。

```zsh
git branch
  issue1
* master
```

###9-2. ブランチの切り替え
新しく作成したissue1ブランチにコミットを追加していくには、issue1ブランチをチェックアウトする必要があります。
ブランチのチェックアウトはcheckoutコマンドで行います。

```zsh
git checkout <branch>
```


※ checkoutコマンドに -b オプションを指定して実行すると、ブランチの作成とチェックアウトをまとめて行うことができます。

```zsh
git checkout -b <branch>
```

###9-2. ブランチの削除
ブランチを削除するには、branchコマンドに -d オプションを指定して実行します。

```zsh
git branch -d <branchname>
```

##10. マージ
現在のブランチに対して、他のブランチで行った変更を取り込むために使うコマンドです。
以下の例では、ブランチbug-fixをmasterブランチにマージします。

```zsh
git checkout master // masterブランチに移動
git merge bug-fix   // masterブランチにbug-fixブランチをマージ
```

##11. Issue

##12. その他のよく使うコマンド

###13. logコマンド
###14. statusコマンド