static なサイトを作るにあたっては、「コミット + scp などでファイルを一気に転送」を繰り返すことがよくある方法だと思う。 github pages のように、 git push のみでできると楽なのでこの環境を構築してみた。

さくらレンタルサーバー以外でも使える方法なのでそこそこ応用が効きそう。

サーバに git 環境を構築する

% cd $HOME
% mkdir tmp; cd tmp;
% wget http://kernel.org/pub/software/scm/git/git-1.7.6.tar.gz
% tar xvf git-1.7.6.tar.gz
% cd git-1.7.6
% ./configure --prefix=$HOME/local
% gmake
% gmake install
% vi $HOME/.profile
PATH に $HOME/local/bin を追加し、$HOME/.profile を読みなおす
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$HOME/bin:$HOME/local/bin; export PATH

bare repository を準備する

% cd $HOME
% mkdir -p repos/www
% cd repos/www
% git init --bare
hooks/post-receive を編集する

push された後にフックすることで、pushと同時に公開ディレクトリにファイルを展開する事ができる。

% cd $HOME/repos/www
% cp hooks/post-receive.sample hooks/post-receive
% vi hooks/post-receive

以下のように編集する。さくらの場合は $HOME/www が公開ディレクトリ。

#!/bin/sh

env GIT_WORK_TREE=$HOME/www git checkout -f

ローカルに戻って編集作業

$ git clone user@user.sakura.ne.jp:/home/user/repos/www
$ cd www
$ touch index.html
$ git add .
$ git commit -m 'initial commit'
$ git push origin master

これで push された内容が反映されている。次回の push からは `git push` のみで反映させることができる。

簡単!