Emacsで複数の分散バージョン管理システムを統合的に扱うDVCを使ってみた


仕事や趣味で触るファイルはMercurialで管理するようにしてます。最初はGitでやってたのですが、諸々の理由でMercurialに以降してしまいました。その辺りの経緯は以前書いたとおり。
gitやめてmercurialとtortoiseHGをインストール
Mercurialのリポジトリを触る時は、TortoiseHGがすごく便利だったのでLinux、Win両方で使わせてもらってました。ただ、ここ最近Emacsから出ることがめんどくさくなってきたのでEmacsからリポジトリを触れるようにしたいと思うようになってきました。

DVC

Mercurialがメインではあるのですが、Gitで流通しているコードもかなりあるので、たまにGitリポジトリを触ったりもします。んですが、たまにしか触らないのでコマンドを覚えられません。そもそもそこらへん自体Emacsでどうにかしてもらいたい。
てことで、次の条件から使えそうなものを探してみました。
・GitとMercurialも同じような感覚で使える
・ファイル単独で操作もできるし、リポジトリ単位でも操作できる

この条件を満たしてくれるのがDVCでした。
XSteve’s Emacs DVC.el page
DVCは数多ある分散バージョン管理システムを統一的に管理するために開発されているツール。程度の違いはあるようですがGNU Arch, Bazaar, git, Mercurial, Monotone, Darcsとかなり広範なシステムに対応しているようです。

DVCのインストール

まず、以下のサイトからDVCを落としてきます。
DVC: Distributed Version Control for Emacs
そして、落してきたArchiveを解凍してからその中で、autoconf -> ./configure -> make として中にできたLispディレクトリの中身をロードパスが通ったところに置いておきます。

.emacsには以下のように書いています。

使っていると気づくと思いますが、dvc-tips-enabledをnonnilにしておくと、コミットする際に一言アドバイスのようなウィンドウが出てきていろいろなTipsが書かれています。これがなかなかどーでもいい情報しか出してくれません。悪いことは言わないのでnilにしておくことをお勧めします。
dvc-prefix-keyはデフォルトでC-x Vとなっています。これはお好みで変えてみると良いと思います。

DVCを使ってみる

でわ、早速使ってみます。全部説明するのは面倒くさいので、Mercurialの作業リポジトリがすでにあるという前提でやってみましょう。
一通り修正が終わったら、早速コミットします。コミットする時は*xhg-status*バッファから行います。デフォルトでキーバインドはC-x V sにあてられています。
*xhg-status*バッファでは、Diredと同じような感覚で操作できます。マークしたファイルをaddする場合はaキー、removeする場合はrキーを押します。こんな感じでリポシトリ単位で操作できるのがなかなかに便利です。
addなり、removeなりが終わったらcキーでコミットログを書くバッファにうつります。一通りコミットログを書いたらお決まりのC-c C-cでコミットです。
コミットの次はpushです。これはxhg-pushという関数にあてられています。リポジトリ内のファイルかディレクトリのバッファを選択している状態でM-x xhg-pushとします、これでリモートリポジトリも更新されたはず。
gitも同じような感じで使えますが、pushがありません。こればかりはターミナルから実行しないといけなさそうです。

実際どうなの

というわけで、 一通り使い方をさらっと書いたわけですが、 いろいろと問題もあったりします。
まず、ドキュメントがほとんどありません。わずかなドキュメントにはDVCはセルフドキュメントだからドキュメントはあんまないよーみたいなこと書いてますが、正直ドックストリングもしょぼい。もしかして、あの役に立ちそうもない一言メモのこと?いずれにしても慣れは必要です。
それとまともに動かない関数が結構あります。特にdvc-*な関数は使えないものが多いので注意が必要です。後、結構バグ多いです。まだ、使って4日くらいしかたってないのですが、二つバグを発見しました。いちおパッチを送っておきましたが、最近は開発もあまり活発ではないようなので、パッチあてられるのもいつのことやら。


というわけで、gitしか使わないような方はmagitなりeggなり使った方が懸命かもしれないです。
逆に複数の分散バージョン管理システムを使わないといけないのであれば、結構便利かもしれません。こういった似たような複数のツールの差を埋められる懐ん広さもEmacsの強みだと思うので、DVCには影ながらすごく期待しています。時々いぢってはpatch送ったりしてみようと思います。