GitHub 入門

# はじめに
## 現状
* 仕事ではSubversionを使用。仕事とは関係なく、プライベートでGitHubを使ってみたい。
* GitHubに登録してみたはいいものの、1年くらい放置。
* 今さらですが、勉強のために、GitやGitHubについてまとめてみようと思った。（自分のメモ用でまとめたので、もし間違ってるところとかおかしいところがあったら教えていただけると助かります）

## [Git](https://git-scm.com/) とは

* バージョン管理を行うためのツール。
* リモートリポジトリ(共有リポジトリ)とローカルリポジトリを使い分けて開発を行う。
* 2005年に誕生。もともとはLinuxカーネルのソースコード管理のために、リーナス・トーバルズによって開発された。
* 売り → 高速。作業時にサーバ接続が必要ない。等

## [GitHub](https://github.com) とは

* Gitを利用した、リモートリポジトリ（共有リポジトリ）を提供しているwebサービス。
* ご利用には登録が必要。無料プランの場合、原則全て公開（パブリック）。非公開（プライベートリポジトリ）にするのは有料（現在は$7/月）。
* GitHubのキャラクターは「[Octocat](http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html)」。


## Git系サービス
GitHubが有名だけど、Git=GitHubではないです。

* [Bitbucket](https://bitbucket.org/)
* [GitLab](https://about.gitlab.com/)

## 事前に知っておいて(知っておいたら)良かったこと
### Gitの概要系

* [小飼弾のアルファギークに逢いたい♥ #22　Gitメンテナ　濱野 純](http://gihyo.jp/dev/serial/01/alpha-geek/0040)

 - この記事を読んで、Gitが始まりや、GitとGitHubの違いが理解できました。

* [「そもそもGitって何？」、「GitとGitHubは何が違うの？」にシンプルに答えるよ](https://blog.sixapart.jp/2014-03/mttips-02-what-is-git.html)
* [SubversionからのGit入門(Gitのメリット、Subversionとの違い)](http://qiita.com/kitfactory/items/693580ca3f51f5833874)

 - そもそもなんでSubversionじゃダメなんだろう？詳しく説明されていて分かりやすかったです。
 - イメージ ： Gitは「分散型」でローカルに保存され、ローカルで構成管理が可能で、主体は「開発者のPC」。Subversionは「集中型」でサーバ上にある1つのリポジトリを利用者が共同で使用し、主体は「サーバ」。

### コミットメッセージ系
チケットがあれば `refs #チケット番号` でいいと思いましたが、チケットがない場合、コメントに何を書いていいか、どんなことを書けばいいか分からないです。これらの記事を読んだら、なんとなくイメージがつかめた気がします。`[コミット種別]要約` でやってみようと思いました。いずれは全て英語で書いてみたいです。
あと、コミットの粒度についても気をつけたいです。

* [Gitのコミットメッセージの書き方](http://qiita.com/itosho/items/9565c6ad2ffc24c09364)
* [GitHubで使われている実用英語コメント集](http://qiita.com/shi_chicken/items/a5f922a3ef3aa58a1839)
* [Changelogのための英文テンプレート集](http://d.hatena.ne.jp/pyopyopyo/20070920/p1)

### セキュリティ系
他人事じゃない。GitHubって便利だけど、原則公開なので注意したいです。調べるまで、非公開にする仕組み .gitignore があるのも知らなかったです。

* [[Git] .gitignoreの仕様詳解](http://qiita.com/anqooqie/items/110957797b3d5280c44f)
* [設定ファイル内のパスワード等を環境変数で隠すための How to 色々](http://qiita.com/ka_/items/a19f65628bdc213fc8f5)
* [初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。](http://qiita.com/mochizukikotaro/items/a0e98ff0063a77e7b694)

### ノウハウ？系
* [git 管理をやめる](http://qiita.com/b4b4r07/items/cac4abd9ae66537e2833)
 - git管理をやめるのは簡単なんだなと思いました。やめ方が分かると安心して使えます。
* [Gitのこれやめて！リスト](http://qiita.com/doilux/items/b5a9abd95ac91e848a5f)
 - 今はまだ一人だけで使ってるけど、参考になりました。

### 学習サイト系

* [ドットインストール git入門](http://dotinstall.com/lessons/basic_git)
* [Gitチュートリアル](https://www.atlassian.com/ja/git)
* [Pro Git](https://git-scm.com/book/ja/v2)

### 学習本

* [入門Git](https://www.amazon.co.jp/%E5%85%A5%E9%96%80git-Travis-Swicegood-ebook/dp/B01IGW5JD6/ref=dp_kinw_strp_1)
* [アリスとボブのGit入門レッスン](https://www.amazon.co.jp/%E3%82%A2%E3%83%AA%E3%82%B9%E3%81%A8%E3%83%9C%E3%83%96%E3%81%AEGit%E5%85%A5%E9%96%80%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-%E5%B7%9D%E9%87%8E%E8%BE%BA-%E6%AD%A3%E5%8D%9A/dp/4798035009)
* [GitHub実践入門](https://www.amazon.co.jp/GitHub%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-~Pull-Request%E3%81%AB%E3%82%88%E3%82%8B%E9%96%8B%E7%99%BA%E3%81%AE%E5%A4%89%E9%9D%A9-PRESS-plus/dp/477416366X)

# はじめての GitHub
## 目標
とにかく使ってみる。始めに出てくる以下のコマンドを理解する。

```
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/ユーザ名/xxx.git
git push -u origin master
```

## GitHub のアカウント登録
[GitHub](https://github.com)から登録。

## GitHub のレポジトリ作成
右上の + をクリックして、「New repository」を選択。「Repository name」を入力して「Create repository」をクリックして作成。

## インストール
環境に合わせてインストール。下記はAmazon Linuxの場合。

```
yum -y install git
```

バージョン確認

```
git --version
```

## 初期設定

#### Git で管理したいディレクトリを作成→移動。

```
mkdir ディレクトリ
cd ディレクトリ
```

#### Gitを使う宣言
.git フォルダが作成される。

```
git init
```

Gitで管理したくないものはここに記述。

``` .gitignore
vi .gitignore
```

#### ユーザー名・メールアドレスの設定
事前に GitHub で登録が必要。

```
git config user.email メールアドレス
git config user.name ユーザ名
```

* `--global` オプションをつけて `git config --global user.name ユーザ名` のようにすると、そのPC上で行なう全ての操作に対して常にこの情報を使うようになる。

#### config 設定の確認

```
git config --list
git config 確認したい設定
```

* `--list` で全ての設定を確認可能

#### config 設定の削除

```
git config --unset 削除したい設定
```

### コミット準備
#### 事前確認
ファイルの状態を確認

```
git status
```

* ちなみに、ここで `git checkout -- ファイル名` とすると変更前に戻すことが出来る。

差分を確認（ステージングエリアに上げる前）

```
git diff
```

* add後(ステージングエリアに上げた後)は `git diff --cached` で確認出来る。

#### 管理対象に追加
管理対象に追加=「ステージングエリアに上げる」という言い方をすることもある。

```
git add 管理対象にしたいもの
```

* `git add .` 今のディレクトリより下のものを全て管理対象に追加。 

#### add後確認
ファイルの状態を確認

```
git status
```

差分を確認

```
git diff --cached
```

### コミット
#### コメント付きでコミット

```
git commit -m "first comment"
```

#### コミット後の確認
コミットログを確認

```
git log
```

* `git log --oneline` 1コミットにつき1行だけのコンパクト表示で見れる。
* `git log -p xxxxxx` どこが変更されているか詳細が見れる。 
* `git log --stat` どのファイルがどれくらい変更されてるかざっと見れる。

#### origin 登録
共有リポジトリを登録。
https://github.com/xxx/xxx.git に「origin」というあだ名をつけるようなイメージ。

```
git remote add origin https://github.com/xxx/xxx.git
```

git remote add [name] [url]。
origin は共有リポジトリのこと。レポジトリの場所(URL)の別名。

### 共有リポジトリに反映
ローカルでの開発内容を共有リポジトリに反映させる。

```
git push -u origin master
```

ユーザ名やパスワードを聞かれるので入力。
origin は共有リポジトリのこと。レポジトリの場所(URL)の別名。
master はブランチ（枝分かれ）の名前。ちなみに master は大事なブランチなので、個人利用では自由にpushしても大丈夫だけど、チームでの場合はmasterには通常pushしないので注意。ブランチはGUIから確認可能（<>Codeタブのすぐ下に n branches と出ていて、クリックすると詳細が見れる）。

「-u」オプションについて
> 省略の呪文。git push -u origin master とすると、次回から git push だけで引数に指定した origin master で勝手に push してくれる。

# 初めてじゃない GitHub (随時更新予定)
今の所まだこの程度です。。必要に応じて身につけていきたいです。随時更新していきたいです。

## 目標
とりあえずGitHubを使ってみる。慣れる。

## masterを更新したい時
追加→確認→コミット→プッシュ。

```
git status
git diff
git add .
git status
git commit -m "コメント"
git push origin master
```

## ブランチ切って更新→マージしたい時
ブランチ=「枝分かれ」の意味。複数のバージョンを同時に開発したいときに使うと便利らしい。

```
# ブランチ作成
git branch ブランチ名

# ブランチ確認 （頭に * のついているのが現在のブランチ）
git branch

# ブランチ切り替え（移動）
git checkout ブランチ名

# 変更（ブランチ先にコミットしたりする）
git status
git diff
git add .
git status
git commit -m "コメント"

# リモートにPush
git push origin ブランチ名


##### 区切りが良くなって、マージしたくなった時 #####

# マージ先(master)に移動
git checkout master

# さっき作成したブランチをマージ先にマージ
git merge ブランチ名

# ログ確認（さっきのブランチの変更内容がマージ先に反映されているか確認）
git log

# Pushする
git push origin master

# マージ後に削除
git branch -d ブランチ名
git push origin :ブランチ名
```

## その他

### helpを見たい時

```
git help
```

* 更に詳細が知りたいときは `git help [config等]` または `git [config等] --help` のようにすると出てくる。

### 共有リポジトリをローカルに持ってきたい時
インストールなどでお馴染みのコマンド。

```
git clone https://github.com/ユーザ名/xxx.git ローカルディレクトリ
```

### 変更を取り込みたい時
ローカルリポジトリのmasterブランチにリモートリポジトリoriginのmasterブランチを取り込む。

```
git checkout master
git pull origin master
```

# 感想
## GitHub歴1週間
* 便利。バージョン管理が簡単に出来るし、webでも見れる。ホームページやブログのような感じで楽しい。
* GitHub の使い方系のサイト見て、見よう見まねでコマンドを打てば、簡単にファイルを管理出来た。
* 実際に使ってみたり、自分でまとめてみたり、調べてみないと何やってるかよく分からなかった。GitHub がちょっと分かるようになった気がして好きになった。
* プロジェクトや人を登録して行動を追えたり、自分がどれくらい作業したかグラフで分かったりするのが面白い。
* 「分散型」のメリットはまだ実感できていない。