.gitconfig と.gitignore について

git のalias を設定し始めて、気づいたらaliasだらけになっていたので、
現在(2011/05/12)の自分の.gitconfig の設定を晒してみる。

dotfiles

  • ~/.gitconfig
[user]
	name = sinsoku
	email = sinsoku.listy@gmail.com
[color]
	ui = auto
[alias]
	ad = add
	br = branch
	ci = commit
	cia = commit --amend
	cih = commit --amend -C HEAD
	cih1 = commit --amend -c HEAD@{1}
	co = checkout
	d = diff
	dc = diff --cached
	dn = diff --name-only
	dw = diff --color-words
	ft = fetch
	l = log --oneline -n 20
	lgraph = log --oneline --graph --decorate --all -n 20
	lp = log --oneline -n 20 -p
	ls = log --stat -n 1
	pl = pull
	ps = push
	rb = rebase
	rbh = rebase HEAD
	rbo = rebase --onto
	rl = reflog show -n 20
	rs = reset
	rsh = reset --hard
	sh = show
	share = daemon --verbose --base-path=/home/sinsoku/repos/ --enable=receive-pack
	so = remote show origin
	st = status -s
[push]
	default = tracking
[core]
	excludesfile = ~/.gitignore
  • ~/.gitignore
*.swp
*.diff
.venv
.rvmrc
.~lock.*

alias について

下記のような、使用頻度の高いコマンドは設定すると楽になると思う。

  • ci = commit
  • co = checkout
  • d = diff
  • l = log --oneline -n 20
  • pl = pull
  • ps = push
  • st = status -s

checkout みたいな8文字のコマンドは、typeすると疲れてしまいます。

注意

alias を設定すると、他人のPC環境で「俺の知ってるgit と違う」とか
「checkout が打てない・・・だと?!」などの事態が起こります。
alias の使用は自己責任で。

alias の説明(いくつか)

説明のないalias で分からないものがあれば、git help で調べるか、グーグル先生に(ぇ

cih
commit --amend -C HEAD

git commit --amend しつつ、コミットメッセージはHEADのものを使用する。
一つ前のコミットをメッセージはそのまま、コードを少し修正するときに便利

dc
dc = diff --cached

index の変更だけのdiff を見る。
commit 前の最終確認に便利。

rb, rbh, rbo
rb = rebase
rbh = rebase HEAD
rbo = rebase --onto

rebase はgit の中でも分かり辛いコマンドの一つかもしれない。
ただ、使いこなせるようになると便利なコマンド。
どのブランチにいても 他のブランチを操作できるので、
慣れると、merge やcheckout、reset の回数が減ります。*1

rl
rl = reflog show -n 20

reflog はHEAD 以外(master やbranch)のログも表示できます。
これを覚えると、rebase やreset での失敗に怯えなくなります。

おまけ・gitk --all

git で作業する前に、必ず "gitk --all&" をする癖をつけておいた方がいいです。
rebase やreset で失敗しても簡単に戻せます。

gitignore

git では版管理に含めないファイルを定義するために.gitignore があるのですが、
実は3箇所で定義できます。

  1. ワーキングコピーの /repo/.gitignore (一般的なやつ)
  2. リポジトリ内の /repo/.git/info/exclude
  3. 自分で指定した core.excludesfile のファイル
  • プロジェクトで無視したいファイルは 1. に
    • プロジェクトメンバ全員が無視すべきファイル
  • リポジトリ単位で無視したいファイルは2. に
    • メンバ全員で共有はしないけど、全gitリポジトリで無視はしないファイル
  • 自分の使用しているツールに関するファイルは3. に
    • vim の*.swp など、自分が絶対にコミットしないファイル

と、私は使い分けています。

*1:隣の人にキモい言われました(´・ω・`)