読者です 読者をやめる 読者になる 読者になる

SVN メインなプロジェクトで Mercurial をゆるく導入した話

Mercurial Advent Calendar 2012 - connpassの 7 日目のエントリです。
6 日目は @yujauja さんの本当は怖いエクステンション - Mercurial Advent Calendar 2012 - tcha.org です。

レガシーなプロジェクトで後輩と二人で Mercurial を導入したことを紹介します。
いきなり全部を DVCS で管理とはいかなくても、かなりゆるーく導入することもできますよというお話です。

Mercurial 導入前

  • VCSSVN を利用
  • レビューが終わるまでコミット不可
  • ROMリリース時とかは作業がおわるまでコミット不可
  • 現在はメインブランチのみ
  • ブランチを作ったりマージしたりは管理者のみ

レビューが完了しないとコミットできないためコミット粒度が大きく、長いと 1 ヶ月単位でローカルに変更内容を保持しているような状態でした。
もちろん、その間のバックアップはファイルサーバに日付フォルダという伝統技法

機能追加要望もバラバラ出てくるのですが、コミットは機能単位のため対象部分のみ手でマージしたりしていて、マージミスが起こりやすいというのも悩みの種でした。

余談ですが、コミットは各リポジトリごとに用意された目印を持ってる人のみコミットできるというルール。
リポジトリA はガンダムリポジトリB はザクみたいな感じでコミット作業中は机の上に立ててアピールしなければなりません。
他では見た事無いですが、よくあるルールなんでしょうか?

環境準備

  • TortoiseHg をインストール
  • リポジトリ準備
    • SVN からチェックアウトしたものを hg init
    • .hgignore ファイルに、SVN管理ファイルを登録
    • SVN からは.hg フォルダを管理外表示のままとした

上記以外には、後輩が DVCS 未経験だったので、@flyingfoozy さんの世代差で見る履歴管理ツール入門を読ませるなど事前の刷り込みをしています。

Mercurial にしたのは私が使っていることもありますが、Windows において TortoiseHg の GUI が素晴らしいというのが大きな理由です。
ゆるく導入するにはこういう点も見逃せません。

試験導入

後輩には、慣れさせるために、こまめにコミットするようにとだけ指示。
作業の区切りがいいところでコミットしてね、くらいの感じです。

@flyingfoozy さんから頂いたリファレンスカードを、いつも見える場所に置くようにしました。
実際、リファレンスカードにあるコマンドくらいしか教えてません。

また、リポジトリがローカル PC 上にしかないのは不安なので、バッチファイルを作ってファイルサーバに定期的にバックアップを取るようにしました。

本格導入

慣れてきたところでブランチについて教えて、機能追加ごとに名前付きブランチを作成する方針で運用開始。
default ブランチを SVN との同期用ブランチとし、レビュー完了でマージして SVN にコミットという流れです。

細かくブランチを切るのでコミットグラフが地下鉄路線図みたいになっています。
ブランチが増えたところでブランチを閉じることも教えました。

導入の効果

  • 機能単位でブランチを切っているので、機能ごとに独立して管理できるようになった
  • 履歴が細かく残るので追いやすい&安心感を得られた
  • レビューがしやすくなった

お手軽な導入でしたが効果はとても大きかったと思います。
後輩も Mercurial の便利さに感動していました。
最近では、教えていないコマンドも自分で調べて試したりしているみたいなので良い傾向です。

今後の予定としては MQ を教えつつ、SVN 側もそろそろブランチができてくると思うので、その準備をしていく予定です。

レガシーな現場だから、周囲の説得や啓蒙が大変だから、さまざまな理由で DVCS の導入なんて無理!という方も、まずは自分の担当範囲だけでも導入してみるといいんじゃないでしょうか。