Subversion und BBEdit
Photographer
Schockwellenreiter

mod_dav_svn(apache)を経由してCommitしたものをそのままupdateする方法のメモ。

これで Commit しただけで自動的にDocumentRootが更新されるようになるので、webサイト制作にはかなり便利になります。

Subversionをセットアップ


Subversionをインストールした後に、以下のコマンドでリポジトリ作成。
# mkdir -p /home/svn/repos/sample
# svnadmin create /home/svn/repos/sample
# svn mkdir file://localhost/home/svn/repos/sample/trunk -m "create"
# svn mkdir file://localhost/home/svn/repos/sample/branches -m "create"
# svn mkdir file://localhost/home/svn/repos/sample/tags -m "create"
その後、davの設定やアクセス制限などを行う必要がありますが、詳しくは下記を参照してください。

ごった煮 - CentOS 4.0導入記(覚え書き) - subversionの導入を参考に。

クライアントの設定


Windowsクライアントの TortoiseSVNのインストール・設定。
(ここは省略)

post-commitの編集


さて、ここからが本番。
Commitした時にDocumentRootにupdateする手段。
SubversionではCommitされた時に動くスクリプトとして post-commit があります。
場所は
/リポジトリの場所/hooks/
です。
ディレクトリの中に post-commit.tmpl というファイルがありますので、 post-commitにリネームします。

そして、post-commitを以下のように編集します。
#commit-email.pl "$REPOS" "$REV" commit-watchers@example.org
#log-commit.py --repository "$REPOS" --revision "$REV"

/usr/bin/svn up /var/www/html/ >> /var/log/svnupdate.log
元々ある "commit-email.pl"と"log-commit.py"はコメントアウトして、その下に svn up コマンドを追加します。

updateさせる準備


これだけでpost-commitは動作するようになるのですが、これだけだと上手く動作しません。
# chmod 755 /リポジトリの場所/hooks/post-commit
# cd /var/www/html
# svn checkout file:///home/svn/repos/sample/trunk ./
# chown -R apache:apache *
# touch /var/log/svnupdate.log
# chown apache:apache /var/log/svnupdate.log
まずはpost-commitに実行権を付けておきます。

その後、一度リポジトリからDocumentRoot宛にcheckoutします。
ただしrootでcheckoutしてしまうとpost-commitからupdateできないため、所有者をapacheにします。
commit時にログを残しておくため、先にファイルを作成しておきます。

これで自動的にアップデートすることになります。

にほんブログ村 IT技術ブログ プログラム・プログラマへ