サイブリッジではバージョン管理システムにメインでSubversionを使っています。
使い慣れると不便なこともなく、使えるのですが、操作を誤るとバージョン管理が壊れたりなど、すこし不満があったのでMercurialという比較的新しいバージョン管理システムを検証も含め試してみました。

なぜMercurial?
バージョン管理システムシステムにはCVS、Subversion、Git、Mercurial、Bazaarといろいろあるのですが、それぞれメリットがあります。その中も特に魅力的と思った点は
- windowsクライアントがwindows7でちゃんと対応かつ優秀。(日本語ももちろんOK)
- CentOSでyumでインストール可能
- パッケージに最初からWEBベースのリポジトリブラウザが入ってる
- http(s)で通信可能。WebDav不要。(認証がSSHでないのでクライアント毎に分けられる。)
- 意外と伸びてる( GoogleTrend参照 )
- トップフォルダのみ.hgが入っている。subversionのようにフォルダをコピーしても壊れない。
- GoogleCodeも採用
参考文献
Google CodeがGitではなくMercurialを採用へ
分散バージョン管理Git/Mercurial/Bazaar徹底比較
どのように使うか?
CentOSで使う場合
yum install gcc python python-devel python-setuptools -yeasy_install mercurial
上記のみでインストール完了。簡単ですね。コマンド一覧はこの辺を参考にしてみてください。
Windosで使う場合
TortoiseHGをダウンロード・インストール。32bit版か64bit版を選んでインストール。
基本的には上記のインストールのみで利用可能になります。
リポジトリサーバの立て方(Linuxで)
せっかくのバージョン管理なのでリポジトリサーバを用意したいと思います。httpやhttpsで繋がるサーバにしたいと思います。
クライアントのインストール。
yum install gcc python python-devel python-setuptools -y
easy_install mercurial
次にリポジトリフォルダの作成
mkdir -p /var/hg/test/reposhg init /var/hg/test/repos
WEB経由で書き込めるようにする
vi /var/hg/test/repos/.hg/hgrc
[web]
push_ssl = false
allow_push = *
通信プロキシスクリプト(?)の設置
vi /var/hg/test/index.cgi
中身はこんな感じ
#!/usr/bin/python
import sys
sys.path.insert(0, "/usr/lib/python2.4")
from mercurial import demandimport; demandimport.enable()
#import cgitb
#cgitb.enable()
import os
os.environ["HGENCODING"] = "UTF-8"
from mercurial.hgweb.hgweb_mod import hgweb
import mercurial.hgweb.wsgicgi as wsgicgi
application = hgweb("repos", "repository name")
wsgicgi.launch(application)
元データはインストールフォルダのどこかにありました。
パーミッションも755に設定chmod 755 /var/hg/test/index.cgi
.htaccessでフォルダの制限する
/var/hg/test/に.htaccessを設置。このスクリプトを置くとユーザ追加も簡単になって便利です。
Apacheの設定
vi /etc/httpd/conf.d/mercurial.conf
Alias /hg /var/hg
<Directory "/var/hg">
AllowOverride All
Options -Indexes +ExecCGI
AddType application/x-httpd-cgi .cgi .pl
DirectoryIndex index.html index.cgi</Directory>
リロードを行います。
/etc/init.d/httpd reload
完成
完成です。
http://******/hg/test/
上記のアドレスにアクセスすると下記のような画面が現れます。
パスワードの設定方法
https://******/hg/test/htpasswd.php
セキュリティ上必要に応じてSSLを設定してください。
Clone方法(subversionでいうチェックアウト方法)
Linuxコマンドラインなら
hg clone http://******/hg/test/ /path/to/folder
Windowsなら
エクスプローラー上でフォルダを右クリック→Tortoise→Clone→Sourcepathに「https://******/hg/test/」を入力。
注意点
Subirsionに慣れている方は一手間増えるのでややこしいかも。
コミット方法
ファイルを修正・変更→Commit→Push(Windowsの場合右クリック→synchronizeから)
更新方法
Pull(Windowsの場合右クリック→synchronizeから)→Update
上記の手順を踏まないといけないので若干ややこしいです。その代わりにリポジトリが汚れにくくなるのがメリット。分散バージョン管理は慣れるまでのハードルが高いです。
Pull→Updateは設定で自動的に行うことができるようです。
ユーザ名の設定
コミットするユーザー名の設定だけはやらないといけないので書いておきます。
Linuxの場合
vi /var/hg/test/repos/.hg/hgrc
[ui]
username = hogehoge <hogehoge@example.com>
Windowsの場合
管理されているフォルダを右クリック→TortoiseHG→Global Settings→Commit
Usernameに設定「hogehoge <hogehoge@example.com>」
以上長くなりましたが、Mercurialライフをお楽しみください。

- 自社管理外のサーバに置いておくこと
- 有料版がわりと高いこと
- 拡張が難しいこと
- マイフォルダ・・・自分のメインのフォルダ・普段使いのフォルダ
- メーリングリスト・・・そのまま、あらゆるメーリングリスト
- wiki・・・社内wiki更新時の差分通知メール
- サーバ・・・サーバ関係の通知メール
- HR・・・採用系のメール
- メディア・・・自社メディアのメール
- 営業報告・・・営業報告のメール
- 業務日報・・・作業日報
- BTS・・・社内のバグトラッキングシステムなどのタスク共有系
- ダイレクトメール・・・DM
- アーカイブ・・・フォルダにメールが増えすぎると検索効率が下がるので古いものはここへ
- スパムメール・・・DMより酷いメール(一応サーバ側でスパム処理はしてますが)


