初心者向け—Gitの環境構築時に設定するとすこし幸せになれるコマンドたち—

※あくまでも少し幸せになれるコマンドたちです。
※そして初心者(自分)向けだと思います。

vagrantで環境構築して、git cloneが終わり
「さぁ、やるぞ！」
と思った時に、

「あ、Gitの設定まだだった…orz」

なんて事がよくあります。（初心者なので…）

さらに、色々なサイトやメモから設定を探すのが面倒…orz

ということで、Gitの設定などをまとめました!
すでにまとめあるかもしれませんが、ご容赦ください(｡-人-｡)




##1．まずは"git config"から
###— ユーザ情報の設定
超当たり前ですが、絶対しなきゃですね。  

- **ユーザ名**  
`$ git config --global user.name "名前"` 
　
- **メールアドレス**  
`$ git config --global user.email "メールアドレス"`  

###— すこし便利な設定　
- **コマンドライン上でgitの出力に色を付ける**  
`$ git config --global color.ui true`  
　
- **Gitのコマンドを打ち間違えても、いい感じに処理を続行してくれる設定**  
`$ git config --global help.autocorrect 1`  
　  
これで、`$ git stats`などと打ち間違えても、  
`$ git status`だなって予測して処理を続行してくれます！  
　
- **テキストエディターを標準のVi/Vimからemacsに変更**  
（これはemacsユーザ向けです）  
`$ git config --global core.editor emacs`  

###— git configでの設定を確認
- **特定の設定を表示**  
`$ git config user.name`  
`$ git config color.ui`  
　
- **設定一覧を表示**  
`$ git config -l`  
または、  
`$ git config --list`

> 参考ページ：[1.5 使い始める - 最初のGitの構成](http://git-scm.com/book/ja/v1/使い始める-最初のGitの構成)
> 参考ページ：[gitで打ち間違えた時にも自動で正しいコマンドを予測し実行する](http://qiita.com/wadako111/items/2a3a78a96384aa2c87a8)


##2.gitにssh keyを作成して登録
ssh keyを登録していないと、permissionエラーが出てきます。
今回はssh keyを作成してgitに登録する手順を簡単に説明します。

githubの方はこちらを見ながら作業をしてもらえるといいかも。
> 参考ページ：[Generating a new SSH key and adding it to the ssh-agent](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)

###ー ssh keyを作成
[Generating a new SSH key and adding it to the ssh-agent](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)
上記ページに書いてある通り次のコマンドを入力し、適当に回答。（実行場所はどこでもOK！）

```
$ ssh-keygen -t rsa -b 4096 -C "メールアドレス"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): ← ()の中はkeyの作成場所。問題なければEnter
Enter passphrase (empty for no passphrase): ← パスワード設定したければ入力。しないならEnter
Enter same passphrase again: ← パスワード設定したければ入力。しないならEnter
Your identification has been saved in /home/vagrant/.ssh/id_rsa.
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
The key fingerprint is:
1c:b7:57:41:f4:79:ad:7b:ea:9b:7e:fc:03:6c:fa:23 uda@basicinc.jp
The key's randomart image is:
+--[ RSA 4096]----+
|                 |
| keyのimageが    |
| 表示される        |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
+-----------------+
````

### ー githubにssh keyを登録
先ほど作成したssh keyの公開鍵の中身をコピーします。

```
$ cat /home/vagrant/.ssh/id_rsa.pub ← ssh keyの公開鍵の中身を確認
ssh-rsa AAAABBBBBhogehogefugafugahogehogefugafugahogehogefugafugahogehoge
fugafugahogehogefugafugahogehogefugafugahogehogefugafugahogehogefugafuga
hogehogefugafugahogehogefugafugahogehogefugafugahogehogefugafugahogehoge
fugafugahogehogefugafugahogehogefugafuga= メールアドレス
```
ssh-asa 〜 メールアドレスまで全部コピーしてください。

githubの[コチラ](https://github.com/settings/keys)のページで「new SSH key」をクリックして、keyのタイトルと公開鍵をペーストして、「Add SSH key」をクリックしたら完了です！

<img width="753" alt="スクリーンショット 2017-02-07 19.51.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/50898/2b0f5a00-ab23-74ad-28d0-c62769f326b5.png">
<img width="750" alt="スクリーンショット 2017-02-07 19.52.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/50898/7b522326-186b-86f8-d882-736584e3ed0e.png">


##3．.gitignoreで管理対象外にする

ローカル特有の設定や、本番やテストで設定が変わるファイルなどがあると思います。

たとえば、

```
$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   envfile
#	modified:   database.yml
#	modified:   log/log_20150101.tsv
#	modified:   log/log_20150102.tsv
no changes added to commit (use "git add" and/or "git commit -a")
```

こんな状況。
envfileやdatabase.ymlはローカルの設定、logディレクトリ以下は毎日のログを貯めるなどです。

これらのファイルをaddやcommitしないようにするのって面倒ですよね…。

###— .gitignoreに記述
ということで、.gitignoreに記述しましょう！
`$ vi .gitignore`
などで.gitignoreファイルを開き、

```vim
envfile
database.yml
log/
```

と追加しちゃいましょう！
たったこれだけで管理対象外になります！

ディレクトリの場合はディレクトリ名の後ろに`/`を入れるだけでOKです！
また、同じ名前や拡張子の場合は、
`hogehoge.*`や`*.txt`などで対象外にできます。

※ただし、一度gitで管理してしまったファイルは反映されないので気をつけてください。

> 参考ページ：[.gitignoreの存在を我々は見過ごしてはならない。](http://qiita.com/asonas/items/abdbf1208e832b5dd0eb)




##4．logが文字化け…を解決
`$ git log`
などでlogを見ようとすると文字化けしてて日本語が読めない…

なんて悲しい状況の時は
`$ sudo localedef -f UTF-8 -i ja_JP ja_JP`
これで日本語になります！

> 参考ページ：[git logで文字化けした時の対処法](http://qiita.com/harukasan/items/9149542584385e8dea75)




##5．logのtreeをコマンドで表示
簡単なlogなら
`$ git log`
もう少しtreeっぽくすると
`$ git log --graph`
で確認できるのですが、treeではないんですよね。

なので、私はcommitやpush、pull、fetchで差分の確認などが、ササッとコマンドで見れるようにtreeの設定をしています。

### —treeをaliasに設定
ということで、aliasに設定しましょう！
aliasを設定する時は、.git/configファイルで設定します。
```$ vi .git/config```
などでファイルを開くと

```vim
[core]
  hogehoge...
   :
[remote "origin"]
  fugafuga...
   :
[branch "master"]
  hamuhamu...
   :
```

のような記述がされていると思います。
ここに、aliasを追加します

```vim
[alias]
graph = log --graph --date-order -C -M --pretty=format:\"<%h> %ad [%an] %Cgreen%d%Creset %s\" --all --date=short
```

これで、
`$ git graph`
コマンドをたたくと
ずらーーーっと立てにtreeが表示されます！

Enterキーでどんどん過去が表示されていき、
`q`と入力すると表示が止まり、コマンドラインに戻ります。

※treeを表示と良いつつ"graph"にしたのは、mktreeというコマンドがあるため、treeだと予測も相まってややこしくなるためです。

> 参考ページ：[2.3 Git の基本 - コミット履歴の閲覧](http://git-scm.com/book/ja/v1/Git-の基本-コミット履歴の閲覧)




##おわりに
取り上げさせていただいた参考ページには本当にお世話になりました。

そして、思ったよりも長くなりました…。
初心者向けだと思うので、初めて使う人やまだ慣れていない人たちの役に立ったらいいなー…と思います☆

以上で、
初心者向け—Gitの環境構築時に設定するとすこし幸せになれるコマンドたち—
でした☆！