2012年10月28日日曜日

[git] gitの便利な設定をチームで共有するためには。

背景


最近、会社で使うバージョン管理ツールをbzrからgitに変えてみた。

慣れてしまうとすごくいろんな事できて楽しい。
ただ、慣れるまではたいへんだから、新しいメンバが入ってきたときは、すごくたいへんそう。
少なくとも、便利なコマンドとかは、チーム内で共有できるようにしておきたい。

 「gitコマンド」、「alias」、「hook script」の3点は必須。
かつ、後々変更があった時も、簡単に取り込めるようにしたい。

git コマンド


git コマンドは簡単に共有できるようにしておきたい。

経験的に、何か作っても、「これインストールすれば使えます」じゃ、誰も使わない。
「このコマンド叩いてください」ってレベルにしておかないと。

git は、パスの通ったところにgit-*って名前で保存しておけば、
勝手にgitのコマンドとして認識してくれるようなので、
作成されたコマンドをプロジェクトのレポジトリに混ぜることにした。

 新しいプロジェクトメンバーが入ってきたら、
.bashrcに、そのディレクトリへのパスを通してもらえれば、
後々、あたらしくコマンドが追加されてもpullすればOK。

共有用ディレクトリには、作ったgitコマンドを入れておく。
$ ls -l (共有用ディレクトリへのパス)
git-scp 
git-test
git-getbranch

.bashrcに以下を書く。
export PATH=$PATH:(共有用ディレクトリへのパス)

alias


aliasも共有にしたい。

 logの表示形式とか、diffをvimdiffで開くとか。

でも、なかなかうまい方法がなかった。

① .git/configを共有
cloneではここ共有されないらしい。
そして、pullしても共有されない。

② ~/.gitconfigを共有にする。
全部共有にすると、こみったーが全員一緒に・・・。

③ [include]を使う
1.7.10から、別のファイルを読み込めるようになったらしい。
これが使えれば、gitコマンドのときみたいに、
共有にしたい設定だけレポジトリの中入れといて、 新しいプロジェクトメンバーが入ってきたら、 .gitconfigに、名前の設定とincludeを書いてもらえればOK。 

やっぱりこの方法が一番スマートだと思う。
.gitconfigを別ファイルで読み込む gitインストール

が、みんなが入れてるgitのversion古くて使えない。。


④ setupコマンドを準備

結局、setupというコマンドを準備して、やってもらいたいalias全部書き込んでおくことにした。
何か変更があったら、pullして、setupを実行してもらう。
まぁまぁこれくらいならやってくれるだろう。 
以下を、(共有用ディレクトリへのパス)に、git-setupというん名前で、
実行権限つけて保存しておいた。


#!/bin/sh

# git rootの取得
gitroot=$(git rev-parse --show-toplevel)

# alias の設定
echo "+ setting alias"
git config --global diff.external git_diff_wrapper
git config --global pager.diff ""
git config --global diff.tool vimdiff
git config --global difftool.prompt false

git config --global alias.files "diff --name-only"
git config --global alias.hist "log --pretty=format:\"%h %C(yellow)%ad%C(reset) | %s%C(red)%d%C(reset) %C(blue)[%an]%C(reset)\" --graph --date=iso"

git config --global alias.ch checkout
git config --global alias.co commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.pull "pull --rebase"
git config --global alias.sb "show-branch --color"
git config --global core.pager less


# hookの設定
echo "+ setting hooks"
ln -sf ${gitroot}/data/gittool/pre-commit ${gitroot}/.git/hooks/pre-commit
ln -sf ${gitroot}/data/gittool/prepare-commit-msg ${gitroot}/.git/hooks/prepare-commit-msg

hook script


hookスクリプトも共有にしたい。

commitのときエラーチェック入れるとか、
commitメッセージを決めるとか、
master push するときIRCに投げるとか。 

1,2と同じディレクトリにスクリプト置いといて、 2のsetupコマンドに書いておいた。

0 件のコメント:

コメントを投稿