Spica*

プログラミングの話。

Git pushした時に、サーバ側の他の場所にあるGitレポジトリをpullする

$ DIR="/path/to/myrepository"
$ git --git-dir=$DIR/.git pull

僕はローカルのテストでのテストとは別に、テスト用のサーバを外部アクセスできる形で立ててnode.jsのプログラムを動かしてるんですが、git-push後にいちいちサーバにログインしてnode.jsを再起動してるとストレスがマッハだったので、上記方法とGit hooksのうちpost-receiveを利用して、サーバ側で自動的に再起動させるようにしました。その時の一つとして、上記のコマンドを利用してます。

post-receive?

git-pushを行った時に、リモート側のレポジトリにて、任意のシェルスクリプトを実行できる仕組みがあります。これがGit hooksのうち、post-receiveです。Git - Git フックとかに記述があります。

つまるところ

僕がしたかったnode.jsサーバの再起動は以下のような感じ。

  • テストサーバに、通常開発で利用しているリモートレポジトリ(myremoterepoitory.git)と、そのレポジトリからクローンしたWeb公開用レポジトリ(myrepository)を用意しておきます
    • $ git clone ../myremoterepository.gitみたいな感じで、ローカルでcloneできます
  • myremoterepository.git/hooks/post-receiveを作成して、以下のような感じで書いておく
#!/usr/bin/env bash

# 環境変数読み込み
source $HOME/.bash_profile
source $HOME/.bashrc

# git-pull
DIR="/path/to/myrepository"
git --git-dir=$DIR/.git pull

cd $DIR
# 任意のサーバ更新処理...
#forever restartall

以上で準備完了です。これでクライアントから普通にgit-pushすれば自動的に再起動されて、空いた時間でおいしいお酒が飲めそうです。