gitconfigで設定していること

gitconfig全体

~/.gitconfigのgitコマンド全体に関わる設定を紹介します

[user]
  name = John Doe
  email = john.doe@gmail.com
[color]
  ui = auto
[alias]
  co = checkout
  cm = commit
  st = status
  br = branch -av
  ft = fetch --prune
  uncommit = reset HEAD^
  hist = log --graph --stat
  l = log --graph --all --format=format:'%C(bold red)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold blue)― %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative
  ignore = !"f() { local s=$1; shift; while [ $# -gt 0 ]; do s="$s,$1"; shift; done; curl "http://www.gitignore.io/api/$s"; }; f"
  delete-merged-branches = !git branch --merged | grep -v \\* | xargs -I % git branch -d %
  sco = !git checkout $(git branch | peco)
[push]
  default = simple

エイリアス系

[alias]
  co = checkout
  cm = commit
  st = status
  br = branch -av
  ft = fetch --prune

よく使うコマンドはエイリアスを設定するとタイプ数を減少させることが出来ます。

ブランチを表示するbranchコマンドでは-aオプションでリモートも含めたすべてのブランチを、-vオプションでコミットメッセージを含めた情報を表示させています。

フェッチコマンドfetchでは--pruneオプションを指定し、自動的にリモートで削除されているブランチを削除するようにしています。

簡易undo

[alias]
  uncommit = reset HEAD^

resetコマンドではオプションの--soft, --hard, --mixedの使い分けにより、HEAD, インデックス, ワーキングツリーがそれぞれどうなるか気にしなければなりません。
好みの動作でよく使うものをエイリアスで登録しています。

ログ表示系

[alias]
  hist = log --graph --stat
  l = log --graph --all --format=format:'%C(bold red)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold blue)― %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative

gitignoreの自動生成

[alias]
  ignore = !"f() { local s=$1; shift; while [ $# -gt 0 ]; do s="$s,$1"; shift; done; curl "http://www.gitignore.io/api/$s"; }; f"
  delete-merged-branches = !git branch --merged | grep -v \\* | xargs -I % git branch -d %

使用言語は環境に合わせたgitignoreを適宜用意するのは面倒なものです。
そんなときはgithubがまとめているgitignoreを参考にするのもよいですが、コマンドからgitignoreを生成できるようにしておくとより簡単になります。

そこでgitignore.ioというサービスを利用し、コマンドからgitignoreを生成できるようにしています。
使い方はgit ignore ruby,railsとオプション指定をカンマ区切りで渡すだけ。
以下のように生成されたgitignoreが表示されます。

# Created by http://www.gitignore.io

### Ruby ###
*.gem
*.rbc
/.config
/coverage/
/InstalledFiles
/pkg/
/spec/reports/
/test/tmp/
/test/version_tmp/
/tmp/

## Specific to RubyMotion:
.dat*
.repl_history
build/

## Documentation cache and generated files:
/.yardoc/
/_yardoc/
/doc/
/rdoc/

## Environment normalisation:
/.bundle/
/lib/bundler/man/

# for a library or gem, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# Gemfile.lock
# .ruby-version
# .ruby-gemset

# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc


### Rails ###
*.rbc
capybara-*.html
.rspec
/log
/tmp
/db/*.sqlite3
/public/system
/coverage/
/spec/tmp
**.orig
rerun.txt
pickle-email-*.html

# TODO Comment out these rules if you are OK with secrets being uploaded to the repo
config/initializers/secret_token.rb
config/secrets.yml

## Environment normalisation:
/.bundle
/vendor/bundle

# these should all be checked in to normalise the environment:
# Gemfile.lock, .ruby-version, .ruby-gemset

# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc

ローカルに反映させたい場合はgit ignore ruby,rails > .gitignoreのようにリダイレクトを使います。
あとは自動生成されたものを元にカスタマイズしましょう。
git ignore listとすると対応しているオプション指定の一覧を見ることが出来ます。

マージされたブランチを削除する

[alias]
  delete-merged-branches = !git branch --merged | grep -v \\* | xargs -I % git branch -d %