GitHub Memo Tutorial

#Linux
* git-2.4.3-7.42.amzn1.x86_64
* git-1:1.9.1-1ubuntu0.2

#Windows
* [msysgit](https://git-for-windows.github.io/)
    * 環境変数について「use git bash only」を選択
    * 改行コードについて「checkout windows-style,commit unix-style line endings」を選択
        * 「Git Bash」起動

#初期設定
```bash
$ git config --global user.email "mail@example.com"
$ git config --global user.name "Name"
$ git config --global color.ui auto
```
* gitconfigに書いてもok

```bash:~/.gitconfig
[color]
	ui = auto
[user]
	email = mail@example.com
	name = Name
```

##SSH Key
パスフレーズはgithub接続時に使用

```bash
$ ssh-keygen -t rsa -C "mail@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/***/.ssh/id_rsa): home/***/.ssh/github-id_rsa
Enter passphrase (empty for no passphrase): *********
Enter same passphrase again: *********
Your identification has been saved in /home/***/.ssh/github-id_rsa.
Your public key has been saved in /home/***/.ssh/github-id_rsa.pub.
The key fingerprint is:
*********************** mail@example.com
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|.   E            |
|.. .             |
| .. o o S        |
|o+ * + o         |
|*.* = =          |
|=. o + o         |
|+.    o.         |
+-----------------+
```

###公開鍵登録
![Screenshot from 2016-02-19 15:38:39.png](https://qiita-image-store.s3.amazonaws.com/0/58788/0f16dfc1-1a81-ca60-b4ea-ef25ac336511.png)

* 登録完了メール受信

```text:mail
The following SSH key was added to your account:

github-id_rsa.pub


If you believe this key was added in error, you can remove the key and disable
access at the following location:

https://github.com/settings/ssh
```

##認証確認

```bash
$ ssh -T git@github.com
Hi hoge! You've successfully authenticated, but GitHub does not provide shell access.
```

#ブランチ戦略
* git-flow
    * 用途毎にブランチを作成
        * master（製品としてリリースする為のブランチ）
        * hotfix（製品に発生したバグ修正をする際に都度作成するブランチ）
        * release（リリースする際に都度作成するブランチ）
        * develop（次期開発用ブランチ）
        * feature（developからブランチ作成する開発用ブランチ）
* github-flow

#ブランチ作成
![Screenshot from 2016-02-19 15:51:13.png](https://qiita-image-store.s3.amazonaws.com/0/58788/bc9968ad-aff3-fa6f-d4b2-a7f381401d17.png)

#git push
* ローカルリポジトリのリモートリポジトリとして登録する
    * origin（識別子）でgit@github.*************/*****.gitのリモートリポジトリを指すようになる。

```bash
$ git remote add origin git@github.*************/*****.git
```
* masterブランチへのpush

```bash
$ git push -u origin master
```

* "$ git push -u origin master"でfatalが出る場合

```text
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

* .ssh/configにgitのホスト情報を定義する

```bash
Host github.com
 IdentityFile /home/***/.ssh/github-id_rsa
```

* リトライし成功を確認

```bash
$ git push -u origin master
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 468 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@github.*************/*****.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
```

* masterブランチ以外のブランチへのpush
    * ローカルリポジトリで作成したブランチをリモートリポジトリにpush

```bash
$ git checkout -b feature-a
$ git push -u origin feature-a
```

#git clone
* リモートリポジトリを取得

```bash
$ git clone git@github.*************/*****.git
```
* masterブランチ以外のブランチの取得

```bash
$ git branch -r
  origin/HEAD -> origin/master
  origin/develop
  origin/feature
  origin/master
$ git checkout -b develop origin/develop
$ git checkout -b feature origin/feature
$ git branch -a
  develop
  feature
  help
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/feature
  remotes/origin/master
```

#git fetch
* 作成したブランチが見えない

```base
$ git branch -r
  origin/master
```

* リモートリポジトリからローカルリポジトリにブランチをインポートする
    * ローカルにインポートするだけでローカルの環境にマージされない
        * git pullを使用して、リモートブランチの内容を現在のブランチにマージさせる

```bash
$ git fetch --all
Fetching origin

$ git branch -r
  origin/develop
  origin/feature
  origin/master
```

#git pull
* 最新のリモートリポジトリブランチを取得
    * リモートの情報を取得した後で自動的にリモートのmasterブランチの内容をマージする
    * リモートリポジトリのdevelopブランチをcommitする
![Screenshot from 2016-02-19 16:24:40.png](https://qiita-image-store.s3.amazonaws.com/0/58788/5c3291b1-1011-e8b6-500f-49f03b67dfdf.png)

* ローカルリポジトリのdevelopブランチへ最新のブランチを反映させる

```bash
$ git checkout develop
$ git pull origin develop
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:*****/zabbix
 * branch            develop    -> FETCH_HEAD
   778d652..4bed912  develop    -> origin/develop
Updating 778d652..4bed912
Fast-forward
 zabbix_server.conf | 2 ++
 1 file changed, 2 insertions(+)

$ cat ***.conf
#commit 2015/2/19

# This is a configuration file for Zabbix Server process
# To get more information about Zabbix,
# visit http://www.zabbix.com

Abbreviation
```

#git tag
* 用途としてはリリースポイント(v0.9 -> v1.0)で使用

```bash
$ git tag -a v0.1 -m "version 0.1"
$ git show v0.1
tag v0.1
Tagger: ************* <******@******.com>
Date:   Thu Apr 28 15:46:50 2016 +0900

version 0.1

commit d7f8dedfe13f3a29d8974843d44b0d58889c884b
Author: ************* <******@******.com>
Date:   Thu Apr 28 15:11:00 2016 +0900

    Update README.md

diff --git a/README.md b/README.md
index cbbb4c9..82f7325 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,2 @@
 # ansible
 2016/4/28
-
-git pull test
```

* git pushはデフォルトではタグ情報をリモートに転送しないので、明示的に宣言が必要

```bash
$ git push origin v0.1
Warning: Permanently added the RSA host key for IP address '***.***.***.***' to the list of known hosts.
Counting objects: 1, done.
Writing objects: 100% (1/1), 169 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:*************/******.git
 * [new tag]         v0.1 -> v0.1
```

* 複数のtagをpushさせる場合は、"--tags"を使用する
    * ローカルにあって、リモートにないtagをpushする

```bash
$ git push origin --tags
```

#Study
[ProGit](http://git-scm.com/book/ja/v2)
[LeanGitBranching](http://k.swd.cc/learnGitBranching-ja/)
[tryGit](https://try.github.io/levels/1/challenges/1)