SVNでローカルサイトの自動更新
Mac OS X 10.5.8 Leopardで、Subversion(SVN)によるWebサイト(ホームページ)の管理システムを構築しました。何回かに分けて、紹介しています。
さて、いよいよ本システムの勘所、リポジトリ更新(コミット:commit)後のローカルサイト(ホームページ)の自動更新です。
Mac OS Xでの、ローカルホームページの設定方法は、次回に紹介します。
SVNには、hook(フック)と言う仕掛けがあって、SVNコマンドの動作時に別コマンドを動かす事が出来ます。今回は、リポジトリ更新後のフック(post-commit)を使います。
リポジトリのtrunkが更新されたら、ローカルホームページを更新する様にします。設定方法は次の通りです。
- ローカルホームページ用のディレクトリ作成
- ローカルホームページ用のディレクトリに作業コピーをsvn checkout
- ローカルホームページ用のディレクトリのオーナ、グループ設定
- フックスクリプト作成
- フックスクリプトのオーナ、グループ、実行権設定
- ログディレクトリの作成
- コミット実験
(1)まず、ローカルホームページ用のディレクトリを作ります。私の環境では、/Usersを別ディスク(パーティション)としているため、この中にローカルホームページ用ディレクトリ(/Users/Htdocs)を作る事にしました。実際には、更にその下の/Users/Htdocs/homepage1をローカルホームページにしています。
$ cd /Users $ sudo mkdir Htdocs
(2)次に、ローカルホームページ用のディレクトリへ、作業コピーをチェックアウトします。
$ cd /Users/Htdocs $ sudo svn checkout file:///Users/Svn/repos/wwwlocal/trunk homepage1
httpによるURL指定ではなく、 fileを使う所が肝です。 httpからのアクセスだと、パスワードが設定されているので、自動更新でエラーになります。多分、解決方法があるのでしょうけど、調べていません。
(3)ここまで出来たら、ユーザ、グループを適切に変更します。Mac OS Xの場合、www(_www)と言うユーザとグループが用意されています。
$ cd /Users $ sudo chown -R www:www Htdocs
作業コピーの準備が完了しました。
(4)その次に、フックスクリプト/Users/Svn/repos/wwwlocal/hooks/post-commitを作ります。
$ cd /Users/Svn/repos/wwwlocal/hooks $ sudo cp post-commit.tmpl post-commit $ sudo vi post-commit
viエディタ(他のエディタでも構いません)を使って、post-commitファイルを編集します。
元の内容は、次の様になっていると思います。
REPOS="$1" REV="$2" commit-email.pl "$REPOS" "$REV" commit-watchers@example.org log-commit.py --repository "$REPOS" --revision "$REV"
これを、次の様に変更します。
REPOS="$1" REV="$2" WC="/Users/Htdocs/homepage1" LOG="/Users/Svn/logs/wwwlocal-post-commit.log" echo "-----" `/bin/date '+%F %T %Z'` "--------------------" >> $LOG /usr/bin/svn update $WC >> $LOG 2>&1 echo "User:" `/usr/bin/id` >> $LOG
(5)フックスクリプトの実行権、オーナ、グループを正しく設定します。
$ sudo chmod 774 post-commit $ sudo chown www:www post-commit
(6)そして、ログファイル用のディレクトリを準備しておきます。忘れない様にして下さい。
$ cd /Users/Svn $ sudo mkdir logs $ sudo chown www:www logs
(7)正しく設定されたかどうか、実験します。上記の設定の後、レポジトリのtrunkに対してファイルを追加してから、コミットします。
$ cd $ cd Sites.svn $ touch testfile $ svn add testfile $ svn commit testfile -m "テストファイル追加" Adding testfile Transmitting file data . Committed revision 25.
ログファイル(/Users/Svn/logs/wwwlocal-post-commit.log)を確認して下さい。正しく、 svn updateされているでしょうか? lsで、ファイルも見ておきます。
$ tail /Users/Svn/logs/wwwlocal-post-commit.log ----- 2010-02-28 01:19:15 JST -------------------- A /Users/Htdocs/homepage1/testfile Updated to revision 25. User: uid=70(_www) gid=70(_www) groups=70(_www) $ ls /Users/Htdocs/homepage1 image1.jpg newpage1.html newpage3.html subdir1 testfile index.html newpage2.html styles.css subdir2
うまくいかない時は、ファイル、ディレクトリの実行権、オーナなどを確認して下さい。
先ほど作ったファイルを、削除しておきます。
$ cd $ cd Sites.svn $ svn remove testfile $ svn commit -m "テストファイル削除" Deleting testfile Committed revision 26.
ログファイルも更新されているはずです。
$ tail /Users/Svn/logs/wwwlocal-post-commit.log ----- 2010-02-28 01:19:15 JST -------------------- A /Users/Htdocs/homepage1/testfile Updated to revision 25. User: uid=70(_www) gid=70(_www) groups=70(_www) ----- 2010-02-28 01:20:57 JST -------------------- D /Users/Htdocs/homepage1/testfile Updated to revision 26. User: uid=70(_www) gid=70(_www) groups=70(_www) $ ls /Users/Htdocs/homepage1 image1.jpg newpage1.html newpage3.html subdir1 index.html newpage2.html styles.css subdir2
【引っ掛かった事】
ローカルホームページ用データをチェックアウトする方法に、てこずりました。file://を使って回避しました。
post-commitで、svn updateしています。本来の意味からすると、svn exportする方が正しいのじゃないのか? と思いましたが、これは時間がかかり過ぎます。必要なファイルの操作だけしてくれる、svn updateの方が良いです。
ファイルやディレクトリのオーナ設定は、正しく(wwwに)設定して下さい。
【参考にしたWebページ】
以下のページを参考にさせていただきました。ありがとうございます。
- 猫ITソリューションズ | ウェブ制作におけるSubversionによるバージョン管理(2) – インストール・設定 –
猫とLinuxがイノベーションを加速する - 私の記事の基本になっています。
- ばーぶろぐ /var/blog: Subversionでコミット完了後に自動で処理を行う (post-commit)
- 猫ITソリューションズさんの参照先になっています。
- Subversionのフック・スクリプト (コミット関連) – snbhsmt_log
- フックスクリプトを参考にさせていただきました。
【シリーズ記事】

![[フリーイラスト] 赤い悪魔の格好をした外国人女性](https://oichinote.com/plus/files/2017/02/gatag-00002308-480x480-98x150.jpg)








ディスカッション
コメント一覧
まだ、コメントがありません