mercurialでハイブリッド管理がステキ

分散バージョン管理システムmercurialはとても便利だ。
が、うちの会社のソース管理はSVN

じゃあローカルに落としてきたソースだけをmercurialで管理すればどうか?などとid:nullpobug先生に質問したところ
mercurial本に載ってるし」
との回答を得られたのでここぞとばかりmercurial本購入

入門Mercurial Linux/Windows対応

入門Mercurial Linux/Windows対応

こちらを参考にしつつ会社の環境でハイブリッド管理を試してみたところ、非常に便利ということが判明したので記事にしてみます。

そもそもmercurialって何が便利?

1:コミットし放題

mercurialはマスターのリポジトリからチェックアウトでファイルだけ引っ張るのではなく、リポジトリそのもののコピーをローカルに作ります。*1なのでマスターのリポジトリでなくローカルコピーのリポジトリにコミットできてしまいます。
こうなればしめたもの。作業途中だろうがなんだろうがリビジョン作りたいなと思ったらコミットしてしまえば問題なし。動かないソースをコミットしてチームメンバーから袋叩きに合うことはないでしょう。

2:オフラインでも大丈夫

SVNとかの場合、社内ネットワークから離れたところ(電車の中, 家etc)で開発する羽目になると事実上コミット不能=一発勝負で開発することになります。
mercurialならローカルにリポジトリがあるので人里離れた山奥でだってコミットできます。

3:共有リポジトリがきれいになる

SVNならバージョン管理のためにやむなく中途半端なソースをコミットすることもあるでしょうが、mercurialならローカルで思う存分作って、外に出しても恥ずかしくない状態にしてから共有リポジトリにコミット*2できます。
必然に共有リポジトリのコミットログは綺麗になり、どのリビジョンに戻っても中途半端な機能が存在しなくなります。

ハイブリッド管理

会社のリポジトリSVNなんかの集中型VCSで既に長期間運用されていたりすると、いざ分散管理が便利だといってもおいそれと乗り換えられるものではありません。
そういう場合は、各個人がローカルにチェックアウトしてきたソースだけをmercurialで管理するというハイブリッド管理が便利です。
個人的にコミットしたい場合はmercurialのコミット、マスターに反映させたい場合はsvnのコミット、と使い分ければいいだけです。*3
こうするだけで、既に運用されているVCSには迷惑を掛けずに上で挙げたmercurialの便利さを享受することができます。

まとめ

mercurialすてき

*1:mercurialではcloneと呼びます

*2:リポジトリを別のリポジトリにコミットする場合はpushと呼びます

*3:マスターの更新をローカルに取り込んだりする必要もあるので、ちょっと工夫は必要