[ホーム]-> [emacs]-> [活用法]-> [vc]

Version Control (版管理)

Emacs には、バージョンコントロールをするアプリケーションである RCS や CVS, および SCCS に対するインターフェースが附属しています。

1. バージョンコントロールとは

単純に言うと、ファイルにどんな変更を施したかを記録するとか、複数の人が編集しているときに、同時に同じファイルを変更したりしないようにするためのものです。

「私はプログラムなんか書かないしー」とか「このマシンを使うのは私だけだしなー」とかいう人もシステムの設定ファイル変更を管理しておくと、いざという時に元に戻すのが簡単だし、昔の設定を思い出したり、変更履歴を見たりすることもできて便利です。 RCS や CVS, Subversion などそのものの働きを知らないことには以下の説明は無意味なので、そういう方は Web に沢山ある優れた解説を御覧下さい。 RCSCVS にも簡単な説明を書きましたが、私自身はもう Subversion しか利用していません。

私は、特にチームでのプログラム開発などやったことのない人間ですが、自宅と職場など、異なる計算機で編集するようなファイル群の間で整合性を取るような場合には Subversion はとても重宝します。

2. RCS 編

2.1. 基本

具体的に RCS が何をするものかというイメージは掴めているとします。 これを Emacs からやってみましょう。例えば
(defun hello ()
  "Say hello."
  (message "hello world!"))
というファイルを書いたとしましょう。これを RCS の管理下に登録するには、 C-x v i (vc-register) とします。 すると、Note: file is write protected とか言ってきて、無事に登録できるはずです。

これ以降は、単に C-x C-q とタイプするだけで、チェックインしたり、チェックアウトしたりできます。 このキーはもともとは Read-only かそうでないかを切り替えるキーですが、バージョンコントロール下に置かれている場合は、上の動作に置き換わるわけです。

上の状態で C-x C-q としてチェックアウトしてから、上の関数をインタラクティブにしてみましょう。 2行目と3行目の間に、(interactive) を挿入します。 もう一度 C-x C-q とすると、*VC-log* というバッファが自動的に開きます。ここには自由に変更ログを書けます。 今回は「関数をインタラクティブにする。」とでも書きましょう。 書き終えたら C-c C-c とします。実際にはこの時点でチェックインされます。後は、これの繰り返しです。

2.2. その他

(その1) の説明だけで基本的には使えるはずですが、バージョンコントロールには他にもいろいろと機能があります。割当てられているキーは C-x C-q の他は C-x v がプレフィクスキーになっています。 いくつか挙げると、

C-x v i RCS の管理下に置く。
C-x v h RCS のヘッダを挿入する。以後自動的にアップデートしてくれる。
C-x v u Undo です。前回チェックインした時の状態に戻す。
C-x v c チェックインのキャンセルです。最後のチェックインでの変更を取り消し。
C-x v a そのディレクトリの ChangeLog をアップデートする。
C-x v l 変更ログを表示する。
C-x v = バージョンの比較を行う。
C-x v ~ バージョン番号を入力すると、そのバージョンを見せてくれる。

なお、C-x v h で挿入されるヘッダですが、これはデフォルトでは

;    $Id: vc.html,v 1.7 2006/01/15 13:34:42 matsu Exp $

みたいな感じになっています。(その後 check in すると、適切に展開してくれる。) これを例えば Emacs Lisp なら

(defcounst filename-version "$Id")

みたいにカスタマイズしたい場合は、むしろ後で説明する autoinsert.el を 使う方が良いでしょう。こちらも標準でついています。

詳しいことは Info の Emacs の File Handling の中の Version Control の項を御覧下さい。

3. Subversion 編

ここでは Subversion の使い方は知っているものとします。CVS については pcl-cvs というパッケージがありましたが、その subversion 版として、psvn.el というものがあります。なお、これよりも速い dsvn.el というものもあるようです。

3.1. インストール

ここでも Subversion は利用できるものとします。もっとも、Linux などの配布では最初からインストールされていることが多いでしょう。 psvn.elXSteve's Emacs page から取ってこれます。ダウンロードしてきて load-path に置き、 その後、.emacs.el

(require 'psvn)
(setq process-coding-system-alist
      (cons '("svn" . euc-jp) process-coding-system-alist))
などと書いておけばよいでしょう。漢字コードは環境に合わせて変更して下さい。

3.2. 基本

基本的には M-x svn-update とすると、該当ディレクトリを聞いてくるので、モデュールを checkout した場所を指定します。 すると Subversion で扱われているファイルがその状態と共に表示されます。 後は commit したり、衝突を解消したり、Subversion で無視するファイルをそのディレクトリの .svnignore に追加する、 などの操作が簡単にできるようになっています。

3.3. その他

psvnをロードすると、Subversion で管理しているファイルを編集している時には、モードラインの左端に黄緑やトマト色、赤などの丸いマークが表示される。黄緑なら up-to-date, トマト色は編集が行われたこと、赤はその他を意味するようだ。(2009年3月の時点) ソースを見るとまだ他のステータスについても色で表示することができるようになりそうな感じ。


[ホーム]-> [emacs]-> [活用法]-> [vc]