2012/11/03

git で設定しとかないと捗らないだろってののまとめ

[git]

TIPS 扱いされてることも多いけど、いやいや、この辺はどんなプロジェクトでも基礎中の基礎の超捗る設定じゃないですか、ってのをまとめてみる。

.git-completion.bash

git コマンドやブランチ名、その他をTAB補完してくれるのと、プロンプトにブランチ名が出せる。
git のソースに含まれるファイルか、このあたりで提供されるものを取ってきて設置して、.bashrc に以下を追記。

if [ -r "$HOME/.git-completion.bash" ]; then
    . $HOME/.git-completion.bash
    PS1="[\u@\h\$(__git_ps1 \" %s\") \w]\n\\$ "
fi

これでブランチ名が長くても安心だし、ブランチ名に dev- とか fix- とかプリフィックスつけとく意味が増す。

似たような設定で、.gitconfig で以下を設定しておくと、間違えてエンターしたときに、候補がひとつならそのまま実行してくれたりする。

[help]
    autocorrect = 1

ちなみに、複数候補ある場合だと、それらをリストして見せてくれる。

git log のデラックス版

豪華なログ表示のエイリアス。git logs でこんな感じに表示する。

.gitconfig

[alias]
    logs = log -p --graph --decorate --pretty=format:\"%ad [%cn] <c:%h t:%t p:%p> %n %Cgreen%d%Creset %s %n\" --stat

グラフと、commit, tree, parent のハッシュを見れるようにしておくのが大きい。

差分表示 hook

コミットするときに、差分のあるファイルリストだけじゃなくて、差分自体も表示してくれる hook。

.git/hooks/prepare-commit-msg

#!/bin/sh

case "$2,$3" in
    commit,HEAD)
        echo "# " >> "$1"
        git diff --cached HEAD^ | sed -e 's/^/# /g' >> "$1"
        ;;
    ,|template,|squash,)
        echo "# " >> "$1"
        git diff --cached | sed -e 's/^/# /g' >> "$1"
        ;;
    *)
        ;;
esac

小さな差分のときはコミットついでで済む。

【2012-11-07追記】
ブクマとかで教えてもらったんですが、この hook でやってることは coimmit -v をエイリアスにするでもおなじことができますね。まあ、コミット時に何か出す hook の雛形ってことで!

コミットメッセージの雛形

コミットメッセージには○○を書け!なんて叫んで主張しても無駄。雛形で誘導する方が効果あると思う。

雛形を読む設定。

.gitconfig

[commit]
    template = ~/.gitmessage.txt

雛形。

~/.gitmessage.txt

# description

# [NEW FEATURES]
# [IMPROVEMENTS]
# [BUG FIXES]
# [INCOMPATIBLE CHANGES]
# [NO CODE CHANGES]

# etc

差分の説明を書き、該当する差分の分類のコメントをイキに変更する。その他書きたいことは # etc の下に書く。

以上。

おまけ

git config コマンドは、-e でエディタ編集起動できる。設定ファイルどれだっけーとかやらなくて済んで捗る。

サイト内検索