[ 地球流体電脳倶楽部 / cc-env / CVS に関するメモ / SIGEN.htm ]

CVS コマンドを Emacs から使う方法 (pcl-cvs)

CVS (Concurrent Versions System) でソフトウェアの管理を行ない, なおかつソースコードの編集に Emacs を用いる場合, Emacs から直接 cvs のコマンドを使いたいと思うことがある.

そのような場合には Pcl-cvs - The Emacs Front-End to CVS を用いると便利である.

このソフトウェアは Debian パッケージ化されているので, Debian ユーザはインストールも簡単である.


  1. インストール
  2. ノンパスログインに関して
  3. Emacs の設定
  4. 利用方法
  5. 参考資料

インストール

Debian GNU/Linux の場合

Debian ならば, 以下のコマンド1つで pcl-cvs をインストール可能であ る. (Debian GNU/Linux 3.0 (woody), および 3.1 (sarge) では, パッケージ 名はcvs-pcl なので注意せよ)

# apt-get install cvs-pcl

依存するパッケージは cvs, elib, emacsen, make であるため, もしもこれら がインストールされていなければ自動的にインストールされる.

cvs インストール時にはリポジトリを指定するようにいわれるが, 自分のローカル PC をリポジトリにする気が無い場合はキャンセル するなどしてどうにかしてほしい.

その他の OS の場合

以下のリンク等を参照していただきたい.

  1. Meadow/Emacs memo: 変更箇所を表示・管理・メモ -- 44.2.1 pcl-cvs − バージョン管理

    <URL:http://www.bookshelf.jp/soft/meadow_44.html#SEC650>

  2. PCL-CVS で履歴管理

    <URL:http://www4.kcn.ne.jp/~boochang/emacs/pcl-cvs-vc.html>

ノンパスログインに関して

CVS リポジトリがリモートホストに存在する場合, リモートホストへ ノンパスログイン出来ることで pcl-cvs の利便性は飛躍的に向上する.

SSH で RSA 公開鍵暗号による認証 では ssh の RSA 公開鍵暗号による認証を用いてリモートホストへの ノンパスログインを実現する方法を記す. 是非先にこちらの設定を 行なうことをお勧めする.

Emacs の設定

基本的に .emacs に設定せずとも動作する. Emacs 自体の設定に関してはここでは述べない.

コミットメッセージに日本語を用いる場合

コミットメッセージに日本語を用いる場合は, プロジェクト全体で文字コード として何を用いるのかを決め, それを固定しておく必要がある. 文字コードを 設定する場合には, 以下の設定のどれかを選択し, .emacs に記述しておく. (他にも文字コードによっていろいろあるだろう).

※ 固定していないと, リポジトリ内のファイルの文字コードが統一されない ため, コミットメッセージなどが化けてしまう場合がある.

以下に設定の例を挙げる. どれかを選択して適宜 .emacs に追記すること.

; 文字コードは EUC で改行コードは LF で
(modify-coding-system-alist 'process "cvs" '(undecided . euc-jp-unix))
; EUC の場合
(modify-coding-system-alist 'process "cvs" '(undecided . euc-japan))
; 改行コードだけ UNIX (LF を用いる)
(modify-coding-system-alist 'process "cvs" '(undecided . undecided-unix))
; sjis の場合
(modify-coding-system-alist 'process "cvs" '(undecided . sjis))
; iso-2022-jp
(modify-coding-system-alist 'process "cvs" '(undecided . iso-2022-jp))

利用方法

ここでは, 既に cvs checkout された作業用コピー内のファイルを Emacs で開いたところからの使い方の解説を行なう.

※ pcl-cvs の機能には checkout するものもあるらしいが, それに関してはここでは述べない.

cvs update

cvs update コマンドは M-x cvs-update で行なう. するとどのディレクトリ で update するのか聞かれるので, update したい位置を入力する.

すると, 以下のようにアップデートされた情報が表示される.

※ ただし, もしもリポジトリがリモートホストにある場合, update を行なう 前に接続を確保しておく必要がある. 下で, ssh 接続によるリモートリポジ トリとの接続確保の方法が載せてあるので参照して欲しい.

================================================================
PCL-CVS release R-2_0-Beta_2.  Copyright (C) 1991-1995 ....
Pcl-cvs comes with absolutely no warranty; for details ....
This is free software, and you are welcome to redistribute ....
conditions; again, consult the Texinfo manual for details.

In directory /home/morikawa/gt4f90io:
           Patched                Config.mk
           Updated                config.pl
           Unknown                config.cache

In directory /home/morikawa/gt4f90io/doc:
           Patched                index.html
           Updated                introduce.html
           Modified   ci          README.txt

In directory /home/morikawa/gt4f90io/src:
           Unknown                AN_FILE.mod
================================================================

右側にファイル名が書いてあり, 左がその状態を示している. ここにあるものを簡単に説明する.

なお, ここにあるような変更があったファイル以外は表示されない.

また, デフォルトだと pcl-cvs は cvs update コマンドと同等の効果しか発 揮できないため, 新規に作成されたディレクトリをアップデートできない. も しも cvs update -d と同じ効果を期待するのならば Ctrl-c Ctrl-u として Optional flags に"-d" を指定した後, 再度アップデートすること (下記の 「その他のキー操作」を参照のこと).

操作

アップデート後, プログラムの様々な修正をおこなったとして, それらプログ ラムをアップデートする方法を紹介する.

コミット

In directory /home/morikawa/dcpam/CVSROOT:
           Modified   ci          checkoutlist
--------------------- End ---------------------

上記のように Modified になっていることを確認し, 「c」を入力する. デフォルトでは「ci」の付く全ての ファイルをコミットしようとする. もしも選択的に 一部のファイルだけをコミットしたい場合は, 「m」で コミットしたいファイルにだけマークを付け, 「c」を入力する. (マークを消すのは「u」である).

In directory /home/morikawa/dcpam/CVSROOT:
         * Modified   ci          checkoutlist
           Modified   ci          cvswrapper
--------------------- End ---------------------

するとコミット時のメッセージを入力するためのバッファ "*cvs-commit-message*" が出てくるので, そこにメッセージを書き込む. 書き込んだら, Ctrl-c Ctrl-c で決定され, ファイルが コミットされる. 結果, 以下のように「ci」(「コミットすべき」 という意味) の記述が消える.

In directory /home/morikawa/dcpam/CVSROOT:
           Modified               checkoutlist
--------------------- End ---------------------

ファイル追加

In directory /home/morikawa/dcpam/CVSROOT:
           Unknown                cvsform.pl
--------------------- End ---------------------

上記のように Unknown になっているファイルにカーソルを合わせ, 「a」を入力する. すると,

In directory /home/morikawa/dcpam/CVSROOT:
           Added      ci          cvsform.pl
--------------------- End ---------------------

となり, ミニバッファで「Enter description」と聞かれるので メッセージを入力する. そのファイルに関することを入力しても 良いが, 入力しなくとも良い. (単に cvs add とするのと 同じである). バッファが分割され, もう1つの方に cvs コマンドを実行した時と同じメッセージが表示される.

さらに, コミットするため, c をどこでも良いので入力する. するとコミット時のメッセージを入力するためのバッファ "*cvs-commit-message*" が出てくるので, そこにメッセージを書き込む. 書き込んだら, Ctrl-c Ctrl-c で決定され, ファイルが コミットされる. 結果, 以下のように「ci」(「コミットすべき」 という意味) の記述が消える.

In directory /home/morikawa/dcpam/CVSROOT:
           Added                  cvsform.pl
--------------------- End ---------------------

削除

まず, (ちょっと無駄だが), 削除したいファイルに ちょっと変更を加えるなどして M-x cvs-update する. (*cvs* バッファに表示するためである).

In directory /home/morikawa/DCPAM/dcpam0:
           Modified   ci          cvs_test.txt
--------------------- End ---------------------

ここでファイルを選択して「r」 (または複数を一度に消したい 場合は「m」でそれらにマークを付けて「r」)

するとミニバッファで「Delete 2 files? (yes or no)」と 聞かれるので, 良ければ yes を入力する. すると 以下のように, Removed と ci フラグが付く.

In directory /home/morikawa/DCPAM/dcpam0:
         * Removed    ci          cvs_test.txt
         * Removed    ci          cvs_test1.txt
--------------------- End ---------------------

(この段階で既に作業用コピー内からファイル本体は 削除されている).

そこで, 「c」を入力するとコミット時のメッセージを 入力するためのバッファ *cvs-commit-message* が出てくるので, そこにメッセージを書き込む. 書き込んだら, Ctrl-c Ctrl-c で決定され, ファイルが コミットされる. 結果, 以下のように「ci」(「コミットすべき」 という意味) の記述が消え, 削除作業が完了する.

In directory /home/morikawa/DCPAM/dcpam0:
           Removed                cvs_test.txt
           Removed                cvs_test1.txt
--------------------- End ---------------------

log を見る

過去に commit された際の履歴を「l」で見ることが可能である.

(ただし, 残念ながら最新版のファイルは *cvs* バッファに現れ ない. もしも最新版ファイルの履歴が見たい場合は, ディレクトリ で「f」を入力して dired モードに入り, ファイルの場所で「!」 を入力し, shell command として「cvs log」を入力して欲しい)

その他キー操作

いくつかのキー操作を一覧する. ただし, 全てのキー操作の動作確認はしてい ない. 詳しくは「h h」として表示される詳細ヘルプやパッケージとしてイン ストールされるマニュアル /usr/share/doc/cvs-pcl/html/pcl-cvs_toc.html を参照せよ.

g           cvs update の再実行
C-c C-u     update のフラグ (デフォルトはなし) を変更.
            ("-d" を指定すれば新規ディレクトリもアップデート)
h, ?        ヘルプ(簡易版:ミニバッファに表示される)
h h         ヘルプ(詳細版:*Help*バッファに表示される)
? ?           〃
p           カーソルを上に移動
n           カーソルを下に移動
f           ファイルを開く
o           ファイルを別ウィンドウに開く
q           終了する(実際にはバッファはまだ存在する)
=           diff を表示
d d           〃
C-c C-d     diff のフラグ (デフォルトは "-u") を変更
m           マークする(l 以下のコマンドはマークしたファイル全てが対象となる)
u           マークを外す
Alt + Del   全てのマークを外す
l           ログの表示
s           status の表示
+           分岐情報を表示. ブランチを視覚的に表示.
U           ワーキングファイルでの変更を破棄し、
            レポジトリに格納した内容に戻す
C           commit する. コメントを入力して, Ctrl-c Ctrl-cで commit.
              ※ ci が付くものを全部選択??
c           commit する(前回のコメントがバッファに入力された状態になる)
              ※ ci が付くものを全部選択??
a           add する
r           remove する
x           すでに commit したファイル (Up-To-Date なファイル)を
            表示対象から外す
i           ファイルを無視させる. バックアップファイルなどに有効.
            .cvsignore ができるので, *.elc などと直接書いてもいい.
e           cvs-examine
t           タグを付ける

参考資料

  1. CVS -- pcl-cvs (本家, 英語)

    <URL:https://www.cvshome.org/dev/addonpclcvs.html>

  2. Pcl-cvs - The Emacs Front-End to CVS

    <URL:http://www.xemacs.org/Documentation/packages/html/pcl-cvs.html>

  3. cvs-pcl パッケージ付属マニュアル (英語だがインストールされる cvs のバージョンと整合的)

    /usr/share/doc/cvs-pcl/html/pcl-cvs_toc.html

  4. [書籍] カール フォーゲル (著), バー モシュ (著), Karl Franz Fogel (原著), Moshe Bar (原著), 竹内 里佳 (翻訳), でびあんぐる (翻訳), 2002: CVSによるオープンソース開発. [Open Source Development with CVS, Second Edition]. オーム社, ISBN: 4274064735, 380 pp.
  5. Meadow/Emacs memo: 変更箇所を表示・管理・メモ

    <URL:http://www.bookshelf.jp/soft/meadow_44.html#SEC611>

  6. ぶ〜ちゃんきんぐだむ -- Meadow を活用しよう - Windows で Emacs - PCL-CVS で履歴管理

    <URL:http://www4.kcn.ne.jp/~boochang/emacs/pcl-cvs-vc.html>

  7. Naney's Web Site > computer > CVS > tools > pcl-cvs パッケージ

    <URL:http://www.naney.org/comp/cvs/tool/pcl-cvs/>

  8. Emacs21 -- pcl-cvs

    <URL:http://emacs-21.ki.nu/application/pcl-cvs.html>


Last Updated: 2006/06/26 (森川靖大), Since: 2006/06/26 (森川靖大)