git pullでファイルに変更があったら特定のコマンドを実行する。
最近ガッツリnode.jsのプロジェクトを行っているんですが、チームで開発しててよくあるのが、git pull
した後にpackage.json
やbower.json
が変更されている事に気づかず、 そのまま起動してしまい、モジュールが足りてなくて動作しないって事です。
多分コレってnode.jsに限らずrubyとかperlとかphpとかpythonとか何でもあると思うんです。もうすぐ、2014年度です、運用でpullしてエラーが出たらnpm install/cpanm/bundle install
しましょうとか言うのは辞めましょう。*1
git pullしたら変更されたファイルの一覧から 対象のファイルが変更されているかどうかを認識して、特定のコマンドを自動で実行するためのコマンド、hookinを作りました。
Getting started
npmが入っているなら超簡単で、
$ npm install hookin -g
で入れて
$ cd <project_root> $ hookin <チェック対象ファイル> <実行コマンド>
ってやれば
にチェック対象のファイルとそのファイルが更新された時に実行されるコマンドが記述されます。
例:
$ hookin package.json "npm install && npm prune" $ hookin bower.json "bower install && bower prune"
作ったらpackage.jsonにgithub上で変更を入れてみましょう。package.jsonに変更があったら勝手にnpm install && npm prune が実行されます。(.gitフォルダが有ることが前提なので、git initかgit cloneでgit プロジェクトである必要があります。)
CREDITS
hookin
を実行すると、.git/hook/post-merge
以下に下記のようなファイルを作ります。
#/usr/bin/env bash #MIT © Sindre Sorhus - sindresorhus.com # forked by Yosuke Furukawa #changed_files checker changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)" check_run() { echo "$changed_files" | grep --quiet "$1" && eval "$2" } # package.json check_run package.json "npm install && npm prune" # bower.json check_run bower.json "bower install && bower prune"
MITライセンスで明記されているように、これの元ネタはsindresorhusがgistに投稿してた以下のスクリプトから派生したものです。
git使ってて便利だった拡張3つ。
gitを今の開発でガッツリ使うようになってすげー便利だと思った拡張を3つ紹介します。
もうね、これらなしではgit使えない。せっかくなので、導入方法と一緒に簡単な使い方も紹介します。
git-completion
gitの補完ツール。
コマンドラインに現在のブランチ名が出る。だけじゃなくて、タブで補完までしてくれる。
導入方法
以下の方法でスクリプトをダウンロードしてきます。
$ mkdir -p /usr/local/git/contrib/completion/; cd /usr/local/git/contrib/completion/ $ curl https://raw.github.com/git/git/master/contrib/completion/git-completion.bash > git-completion.bash $ curl https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > git-prompt.sh $ chmod +x git-completion.bash $ chmod +x git-prompt.sh
そしたらbashrcとかにこのスクリプトを読み込むようにしておきます。
$ cd ~
$ vim .bashrc
bashrc内
# git settings source /usr/local/git/contrib/completion/git-prompt.sh source /usr/local/git/contrib/completion/git-completion.bash GIT_PS1_SHOWDIRTYSTATE=true export PS1='\[\033[1;32m\]\u@\h\[\033[00m\]:\[\033[1;34m\]\w\[\033[1;31m\]$(__git_ps1)\[\033[00m\]\$ '
そしたらsourceで反映させてください。ちなみにexport部分は色を付けているだけなので、なくても問題はありません。
ただ色が付いているといろいろ捗るだけです。
$ source ~/.bashrc
使い方
.gitが存在する場所に行けば現在のブランチが見えていると思います。
他にもタブでブランチを保管することができるようになります。
ちょっと文字が明るいとか色が被って見づらいって時は、bashrcの32mとか34mとか書いてある部分をいじれば色を変えることができます。
エスケープシーケンス表が乗っているところを参考に変えてみてください。
参考にしたサイト:MacのターミナルでGitのブランチ名を表示する - アインシュタインの電話番号☎
tig
tigも便利。tigなしでは正直history見たりするの厳しい。手頃だし。
導入方法
こっちはもっと簡単。Homebrew が入っていれば入れるだけ。
$ brew install tig
Homebrew入っていないって人はportsでも入れられると思います、が、未検証。
こことか参考にしてみてください。
gitをブラウズするのに最適な「tig」をMacportsから入れてみた at HouseTect, JavaScriptな情報をあなたに
使い方
gitリポジトリ内でtigって打つだけ。
$ tig
これだけで、historyが一覧される。
vimと同じく 'j', 'k'で移動もできます。
Enterを押せばコミットの詳細もみれます。
詳細から一覧に戻るには 'q' を押すだけ。
他にも便利な使い方としては、blameするとき。
よくあるケースとして、
「おい、このコード誰が書いたんだよ!!」
って言われる時ありますよね、その時に無罪を証明するために "tig blame" を使いましょう。綺麗に色付けされます。(普通のgit blameでもいいんだけど、色がついてなくて見難い。)
$ tig blame <FILENAME>
あと、tig statusもgit statusを色付けして表示してくれる上に、'u'ってやるだけでstage/unstageを切り分けられる。
fugitive.vim
これはそこまで酷使してないけど、vim上でgitの状況知る時に便利。
導入方法
NeoBundle使っている人は、以下の行を追加して、NeoBundleInstallってやるだけです。
NeoBundle 'tpope/vim-fugitive'
他のplugin管理ツールを使っている人はgithubから取ってくるなりして導入してください。
tpope/vim-fugitive · GitHub
使い方
vimで開いた状態でvim commandを打って使用する。自分がよく使うのは以下の3つくらい。vimを開いた状態から使いたい場合にだけ使用する。
:Gstatus
git statusをvimのウィンドウに開く。:Gread
現在開いているファイルをコミット直前の状態に戻す。いわゆる git checkoutする。ただし、実行直後はバッファに反映されるだけでファイルは変更されない。:Gblame
git blameする、これも色がついていていい感じになる。