Emacs のバージョン管理機能(VC)のかっこいい所
だいたい何かを書く時は、エディタは Carbon Emacs 、バージョン管理システムは Subversion を使っているのですが、シェルバッファに subversion のコマンドを打ち込むというのが面倒になってきたので、読み残していた「入門 GNU Emacs 第3版」の「12 章 バージョン管理」を読みました。
Emacs のバージョン管理(VC)がどういうものかよく分かってないのですが、次の 2 点がかっこいいなと思いました。
- RCS も CVS も Subversion も同じコマンドを使える
- 登録もコミットも同じコマンドを使える
1 つ目は「RCS も CVS も Subversion も同じコマンドを使える」。バージョン管理されているディレクトリ内のファイルに限定されますが、そのようなファイルを開くと、自動的にマスタファイルを探索します(Subversion の場合、.svn ディレクトリ以下のファイル)。その後は、どのバージョン管理システムを使っていても、マイナーモード VC のコマンドで動作させることができます。オブジェクト指向でいうところのインタフェースみたいな感じですね。
2 つ目は「登録もコミットも同じコマンドを使える」。前述の本には次のような感動的な記述があります。
バージョン管理されているファイルがどの状態にある場合でも、次にするべきことは論理的に 1 つしかない
なるほど。このコマンドというのが C-x v v で、バージョン管理されているディレクトリ内の登録されていないファイルに対して打ち込むと登録され(Subversion の場合、svn add に相当)、登録されたファイルまたは編集されたファイルに対して打ち込むとコミットが実行されます(Subversion の場合、svn commit に相当)。デザインパターンでいうところの State パターンみたいな感じですね。
ずっと使っている人にとっては当たり前なのでしょうが、僕には衝撃的でした。
ところで、Microsoft のバージョン管理システム VSS のチェックアウト機能は、CVS や Subversion とは違い、ファイルをロックします。これはチェックアウトした人がロックを離すまでは他の人が変更はチェックアウトすることができないということになります。この仕様は、CVS の延長線上にあるのかとずっと思っていたのですが、そうではなかったんだということを知りました。
RCS も VSS と同様にファイルをロックするらしいのですが、ロックした人の作業が終わるまで、他の人がチェックアウトできないという「制限」の解消が、CVS が開発された動機の 1 つだと書いてありました。
その代わり、並行して行われた変更の調停を試みる機能が装備されています。
オライリー・ジャパン (2007/03/12)
売り上げランキング: 7628