Subversionを使っていたんだけど,あるところでネットワークに接続しない環境でもcommitしたい場合があるので,分散バージョン管理を使いたくなった。
分散バージョン管理だと良く聞くのがGitとMercurial。どこかの記事(あとで探そ)が自分的にヒットしたのと,NetbeansのデフォルトがMercurialだったので,Mercurialを使ってみることにする。
インストールは,FreeBSDなので,/usr/ports/devel/mercurialでmake, make installで終了。
ただ使うだけならインストールした時点で使えるが,サーバで集中管理+クライアントで分散管理としたいので下記を参考に設定してみる。
MercurialはサーバにPushするためにSSHとHTTP経由が使える(らしい)。
今回は,HTTP経由を選択した。
HTTP経由で公開するには,hgweb.cgiを公開する必要がある。
portsでインストールした場合,hgweb.cgiは,
/usr/local/share/mercurial/www
にあるので,webサーバのcgiにコピーして使う。
ちなみに/usr/local/share/mercurial/contribにはhgrcとかのサンプルもあった。(テストインストールの時は気がつかなかったorz...)
今回は,repositoryを/usr/local/mercurial/reposに置いてみる。
mercurialは,configファイルとhgrcでいろいろ制御できるらしい。configファイルは,.configとし,cgi-binにhgweb.cgiと一緒に置くことにする。
.config
[collections] /path/to/repos = /path/to/repos
と記述し,複数のリポジトリを公開できるようにする。
普通にApacheで公開すると
http://YOUR-DOMAIN or YOUR-IPADDRESS/cgi-bin/hgweb.cgi http://YOUR-DOMAIN or YOUR-IPADDRESS/cgi-bin/hgweb.cgi/TEST-PROJ
とかでアクセスするんだけど,ちょっと長いし,なんかイケていない気がする。
そこで,mod_rewriteを使う方法を分散型バージョン管理Mercurialをインストールした azurebird4uさんの所で見つけてやってみた。
http://YOUR-DOMAIN or YOUR-IPADDRESS/hg
でアクセスすると,アクセス後のURLは
http://YOUR-DOMAIN or YOUR-IPADDRESS/cgi-bin/hgweb.cgi
となってしまう。 何か足りないのかとも思って深堀しようかともおもったんだけど,次の方法を見つけて上手くいっている。
ScriptAliasでhgweb.cgiまでを書いてしまう。
#vi httpd.conf : ScriptAlias /cgi-bin/ "/PATH/TO/cgi-bin/" ScriptAlias /hg "/PATH/TO/cgi-bin/hgweb.cgi" :
とすると
http://YOUR-DOMAIN or YOUR-IPADDRESS/hg http://YOUR-DOMAIN or YOUR-IPADDRESS/hg/TEST-PROJ
としてアクセスすることが出来る。
つづく 2011-02-18