Asial Blog

Recruit! Asialで一緒に働きませんか?

Gitを使い始めたらやっておきたい便利な設定いろいろ

カテゴリ :
バックエンド(プログラミング)
タグ :
Tech
git
こんにちは、中川です。

Gitを使い始めてから、Subversionを使う機会がめっきり減ったこの頃です。
Gitだとローカルだけで簡単に使い始められるのもいいですが、気軽につくれるbranchや、mergeのしやすさがたまりませんね。

インストール直後の状態でも普通に利用できますが、
ちょっとした設定でさらに使いやすくなる方法をご紹介したいと思います。

※今回ご紹介する内容はいずれも私のMacBook上での動作確認となり、Windows環境は考慮していませんがご容赦ください。

■ユーザー名とE-mailアドレスの設定


まずは、最初にユーザ名と、メールアドレスを設定してしまいましょう。
  1. $ git config --global user.name "yoshiki"
  2. $ git config --global user.email "yoshiki@example.com"

■カラーリング


git status や git diffなど、デフォルトでは味気ない文字がズラズラと画面に表示されますが、それを見やすいようにカラーリングすることができます。
  1. $ git config --global color.ui auto
・画面表示例



■gitコマンドのエイリアスの設定


Gitのよく使うコマンド達を短く呼び出せるように、エイリアスを設定します。
  1. $ git config --global alias.co checkout
  2. $ git config --global alias.ci commit
  3. $ git config --global alias.st status
  4. $ git config --global alias.br branch
  5. $ git config --global alias.hist 'log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short'
これで、
  1. $ git st
とか、
  1. $ git ci -m "test commit"
などと、簡単に呼び出せます。ちょっとした差ですが頻繁に呼び出すコマンド達なので、ありがたみが実感できます。

ちなみに、「git hist」のエイリアスは、以下のようなツリー表示のログが簡単に確認できて便利です。

・画面表示例


■自分用のgitignore設定追加


自分の開発環境だけでできてしまうようなファイルのために、
プロジェクト内の.gitignoreに設定追加してしまうと他の人に嫌がられますよね。
そこで、自分用に追加でホームディレクトリの.gitignoreファイルを利用するようにします。
  1. $ git config --global core.excludesfile ~/.gitignore
私は、「.DS_Store」(Macでできるファイル)や「/tags」(サクラエディタ用タグファイル)などを指定しています。

■ここまでのGit設定内容一式。


ここまでのコマンドでの設定作業は、ホームディレクトリの.gitconfigに以下のように直接記述でも可能です。

~/.gitconfig
  1. [user]
  2.   name = yoshiki
  3.   email = yoshiki@example.com
  4. [color]
  5.   ui = true
  6. [alias]
  7.   co = checkout
  8.   ci = commit
  9.   st = status
  10.   br = branch
  11.   hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
  12. [core]
  13.   excludesfile = ~/.gitignore

ここまではGitのコンフィグでしたが、以降はbashの設定を行っていきます。

■bashのプロンプトにGitのbranch名を表示させる。


Gitで管理しているディレクトリにいるときに、bashに常にbranch名を表示するようにします。これでうっかり別のbranchで作業していたなんてことがなくなりますね。

追記:コメントにて「__git_ps1」を教えていただきました。
git-completionを導入している場合、.bashrcに、以下のように簡単にbranch名が表示できます。

  1. source ~/git-completion.bash
  2. PS1="\h@\u:\W\$(__git_ps1) \$ "
追記ここまで。


~/.bashrc
  1. function parse_git_branch {
  2.   git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
  3. }
  4. function precmd() {
  5.   PROMPT="\h@\u:\W\$(parse_git_branch) \$ "
  6. }
  7. function proml {
  8.   PS1="\h@\u:\W\$(parse_git_branch) \$ "
  9. }
  10. proml
※「\$(parse_git_branch)」以外の表示内容は適宜変更してください。上記は私のmac上の設定です。

※設定を反映します。
  1. $ source ~/.bashrc
これで、Gitで管理しているディレクトリに移動すると以下のように「(master)や(hoge_branch)」といった、
ブランチ名が表示されるようになります。
  1. mac@air:~ $ cd Desktop/work/blog/
  2. mac@air:blog(master) $ git branch  ・・・・・・・・・←(master)表示
  3.   hoge_branch
  4. * master
  5. mac@air:blog(master) $ git checkout hoge_branch
  6. Switched to branch 'hoge_branch'
  7. mac@air:blog(hoge_branch) $  ・・・・・・・・・・・・←(hoge_branch)表示
  8. mac@air:blog(hoge_branch) $ git branch
  9. * hoge_branch
  10.   master

参考:http://railstips.org/blog/archives/2009/02/02/bedazzle-your-bash-prompt-with-git-info/

■bashでGitのコマンド補完


Gitのコマンドやオプションの補完を行えるようにします。
以下のURLからファイルをダウンロードしてホームディレクトリなどに保存します。
https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

そのファイルを、.bashrcで読み込むように設定します。

~/.bashrc
  1. source ~/git-completion.bash
※設定を反映します。
  1. $ source ~/.bashrc
ためしに「git 」(gitの後にスペース)と打って、タブを連打するとズラズラと候補がでてきます。ちなみにコマンドだけでなく、オプションも補完してくれます!
  1. $ git 「ここでタブを押す」
  2. add                 cherry-pick         fetch               instaweb            relink              st
  3. am                  ci                  filter-branch       log                 remote              stage
  4. annotate            citool              format-patch        merge               repack              stash
  5. :
  6. :

  1. $ git log --「ここでタブを押す」
  2. --abbrev                   --dirstat                  --max-parents=             --pretty=
  3. --abbrev-commit            --dirstat-by-file          --merges                   --quiet
  4. --abbrev=                  --dirstat-by-file=         --min-age=                 --raw
  5. :
  6. :

以上、どれもさくっと簡単に設定できますのでぜひ試してみてください。
他にも、もっと便利な設定や使い方がありましたら是非教えていただければと思います。