CVS (Concurrent Versions System) でソフトウェアの管理を行ない, なおかつソースコードの編集に Emacs を用いる場合, Emacs から直接 cvs のコマンドを使いたいと思うことがある.
そのような場合には Pcl-cvs - The Emacs Front-End to CVS を用いると便利である.
このソフトウェアは Debian パッケージ化されているので, Debian ユーザはインストールも簡単である.
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 をリポジトリにする気が無い場合はキャンセル するなどしてどうにかしてほしい.
以下のリンク等を参照していただきたい.
Meadow/Emacs memo: 変更箇所を表示・管理・メモ -- 44.2.1 pcl-cvs − バージョン管理
PCL-CVS で履歴管理
CVS リポジトリがリモートホストに存在する場合, リモートホストへ ノンパスログイン出来ることで pcl-cvs の利便性は飛躍的に向上する.
SSH で RSA 公開鍵暗号による認証 では ssh の RSA 公開鍵暗号による認証を用いてリモートホストへの ノンパスログインを実現する方法を記す. 是非先にこちらの設定を 行なうことをお勧めする.
基本的に .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 コマンドは 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 ================================================================
右側にファイル名が書いてあり, 左がその状態を示している. ここにあるものを簡単に説明する.
Updated
作業用コピー内に無かったファイルが新規にアップデートされた.
Patched
作業用コピー内にあったファイルが patch によりアップデートされた.
Modified
作業用コピー内のファイルに変更が加えられている. ci は commit の必要がある場合に表示される.
Unknown
作業用コピー内にのみ存在するファイルでリポジトリ内には存在しないもの.
なお, ここにあるような変更があったファイル以外は表示されない.
また, デフォルトだと 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 ---------------------
過去に 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 タグを付ける
CVS -- pcl-cvs (本家, 英語)
Pcl-cvs - The Emacs Front-End to CVS
<URL:http://www.xemacs.org/Documentation/packages/html/pcl-cvs.html>
cvs-pcl パッケージ付属マニュアル (英語だがインストールされる cvs のバージョンと整合的)
/usr/share/doc/cvs-pcl/html/pcl-cvs_toc.html
Meadow/Emacs memo: 変更箇所を表示・管理・メモ
ぶ〜ちゃんきんぐだむ -- Meadow を活用しよう - Windows で Emacs - PCL-CVS で履歴管理
Naney's Web Site > computer > CVS > tools > pcl-cvs パッケージ
Emacs21 -- pcl-cvs