Powered by CVS

WinCvs

CVSバージョン管理システムは、DOS窓で動作するコマンドラインです。
WinCvsは、Windows上で動作するCVSのフロントエンド(GUI)です。

WinCvsの構成は、以下の様になっています。

WinCvs

CVS(RCS)はWinCvsに含まれています。
外部プログラムとして、エディタ、Diffを設定出来るようになっていて、
好みのツールと連携出来る様になっています。
Diffは、ExamDiffを設定するとビジュアルで使いやすいです。
また、Tclをインストールすると、マクロ機能として使うことができます。

CVSの概要

CVSを使うには、最初にリポジトリという貯蔵庫を作る必要があります。
リポジトリにはモジュールのまとまりでファイルのマスタファイル等が格納されます。
通常、リポジトリは複数のメンバで使うために共有フォルダやサーバー上に置きます。
もちろん、個人で使う場合は、リポジトリをローカルディスクに置くこともできます。
通常、ユーザがリポジトリの中身を意識することはなく、意識するのはモジュール名だけです。

CVSによるおおまかな作業の流れは以下の通りです。
おおまかな作業の流れ
最初に、init → import → checkoutまで済ませれば、
日常良く使うのは、commit, update, statusくらいです。

CVSのコマンド

CVSは多くのコマンドを備えています。以下は主なCVSのコマンド一覧です。

コマンド説明
initリポジトリの作成と初期化をします。管理者が最初に一度だけ行います。
importモジュール(プロジェクト)の作成、又は、ベンダーの分岐を行います。
checkoutモジュールからファイルをチェックアウトします。
commit修正したファイルをチェックインをします。ファイルの変更を他の開発者に公表します。
update作業フォルダまたは作業ファイルを最新情報に更新します。
addモジュールにファイルを追加します。
removeモジュールからファイルを削除します。
diff2つのリビジョン間の相違点を表示します。
exportモジュールからファイルをチェックアウトします。checkoutとの違いは、CVSフォルダを作らないところです。
logCVSのログ情報を表示します。
releaseリリース後に、作業フォルダの削除を行います。
rtagファイルの特定のリビジョンに、タグ文字列(ラベル)を振ります。
statusファイルの現在の状態を表示します。
tagファイルにタグ文字列(ラベル)を振ります。

その他のコマンドについてはCVSのマニュアルで確認してください。

インストール

それでは、WinCvsをインストールしてみましょう。
CVSは、WinCvsに含まれているので、WinCvsをインストールするだけですが、
外部プログラム(エディタ、Diff、Tcl)は、別途インストールする必要があります。
WinCvsのインストールは、インストーラが付属しているので簡単です。
WinCvs120.zipを解凍して、その中のsetup.exeを起動するだけです。

起動と設定

最初にWinCvsを起動すると、WinCvs Preferencesダイアログが開くので、
CVSROOTとHOMEと外部プログラムの設定をします。
(後でメニューのAdmin→Preferences...で設定することもできます)

まず、Enter the CVSROOT: にリポジトリの共有フォルダを設定します。
ここでは、例として "M:\CVS" を入力しました。
私の場合、"M:" は共有フォルダになっているので、
Samba経由でUNIXのファイルサーバにアクセスすることになります。
WindowsのUNC表記で、"\\hostname\project"のような設定も出来ます。

次に、WinCvsタブの外部プログラムを設定します。
Default viewer used to open files: に好みのエディタを設定します。(デフォルトはNotepadになっています)
External diff program: に好みのDiffプログラムを設定します。(デフォルトは設定されていません)
最後に、HOME folder: にホームフォルダを設定します。(デフォルトは設定されていません)

メイン画面

設定が終わると、WinCvsの画面が表示されます。

画面下にはコマンドの実行ログが表示されるログウィンドウがあります。
操作時のエラーはログウィンドウに表示されますので、エラーを見逃さないようにしましょう。
また、Tclをインストールすると、ログウィンドウでCVSのコマンドを直接入力することが出来ます。

日本語フォントの設定は、メニューEdit→Font...で出来ます。

リポジトリの作成と初期化

まず、使うに先だってリポジトリの作成と初期化を行います。
この作業は、通常、管理者が一度だけ行うものなので、管理者以外の方は先へ読み進んでください。
メニューCreate→Create a new repository...で、Init Settingsダイアログを
開き、GeneralタブのCVSROOTを確認して、OKボタンを押します。

サーバに "M:\CVS\CVSROOT" のフォルダが出来て、 その中に共有のデータベースが作成され、初期化されます。

インポート

次に、ファイルをモジュールにインポート(登録)します。
メニューView→Change browser location...で、Selectダイアログを開いて、
ファイルのあるフォルダを指定します。OKボタンを押すと、
ウィンドウにファイル一覧が表示されます。
ファイルを選択し、メニューCreate→Import module...をクリックすると、
Selectダイアログが開くので、ソースのあるフォルダを選択し、OKボタンを押すと
Import filterダイアログを開きます。

Entry stateの行をダブルクリックすると、Entry descriptionダイアログが開きます。
ここで、ファイルの属性をTEXTやバイナリにしたり、モジュールに登録したくないファイルを無視したり出来ます。

Import filterダイアログで、Continueボタンを押すとImport settingsダイアログが開きます。

Select the module name and path on the remote server: にモジュール名を入れます。
Enter the log message: にコメントを入れて、OKボタンを押します。

サーバに "M:\CVS\test" のフォルダが出来て、その中にモジュールのRCSファイル作成されます。

チェックアウト

次に、モジュールから作業フォルダにファイルをチェックアウトします。
メニューのCreate→Checkout module... をクリックすると、
Selectダイアログが開くので、作成する作業フォルダを選択し、
OKボタンを押すとCheckout settingsダイアログを開きます。

Enter the module name and path on the remote server: にモジュール名を入れて、OKボタンを押します。

"test"モジュールの作業フォルダが出来て、
その中にCVS管理フォルダとモジュールのファイルがコピーされます。
チェックアウト作業が終ると、こんな画面になります。
日本語のファイル名も正しく表示されています。

ファイル名の左端のアイコンは、ファイルがRead Onlyであることを示しています。
その右側のアイコンは、ファイルがテキストファイルであることを示しています。
ファイル名の右側には、ファイルのリビジョン、ステータス、タグ名、日付が表示されます。

使ってみましょう

ファイルを編集して、修正内容をコミット(登録)してみましょう。
まず、RCSだと、ここでファイルをロックするのですが、CVSではしません。
いきなりエディタでファイルを編集します。編集したいファイルを選択して、
メニューQuery→Edit selectonで、外部エディタが起動します。
エディタでファイルを編集して保存します。画面では、変更のあったファイルの
ビットマップが白から赤に変化します。

次に、変更したファイルをコミットします。
変更したファイルを選択して、メニューCommit selectionで、
Commit settingsダイアログが開くので、コメントを入れてOKボタンを押します。
画面では、コミットしたファイルのビットマップが赤から白に戻ります。

では、コミットしたファイルの相違点を見てみましょう。
先程、コミットしたファイル名を選択して、メニューQuery→Graph selectionで、
Log settingsダイアログが開きます。そのままOKボタンを押します。
以下の様なグラフ画面が表示されます。

画面上のリビジョンの1.1と1.2をShift+クリックして選択して、
メニューGraph→Diff selectionをクリックすると以下の様にExamDiffが開きます。
日本語もフォント設定で表示できるようになります。

ステータス

個人で使うには、これまでに紹介した機能で困ることはないでしょう。
しかし、ワークグループで使う場合は、そうは行きません。
なぜならば、自分以外のメンバが同時にファイルを修正しコミットするからです。
ここからはWinCvsの表現力の問題になりますが、
WinCvsは、他のメンバがどのファイルをコミットしたのかをビジュアルに
表示する機能を持っていません。
そのため、ステータスの結果は、ログウィンドウに表示されるので、
それを見て更新されたファイルを見つけてアップデートしないといけません。

ステータスをビジュアルに見るには、PeggyProが便利です。
Peggy ProのCVSステータス機能は使いやすく、
作業リビジョンとリポジトリリビジョンの状態の確認ができるので大変便利です。
ただし、PeggyProにはinit, import等の機能がないので、
WinCvsとPeggyProを併用することになります。

日本語対応

WinCvsで日本語を使った時に以下の問題点があります。
非公式ながら日本語版が出ています。日本語ファイル名を使う方は日本語版が安心です。

参考文献

付録A (キーワード置換)

ファイルの先頭のコメント部分に $Id$ のキーワードを入れておくと、
checkout, updateをした時に、CVSがその文字列を見つけてファイルのリビジョン情報を埋め込んでくれます。

置換前
#
# $Id$          
#
置換後
#
# $Id: test.tcl 1.1 2001/02/25 08:01:01 s-imai Exp $
#

付録B (サンプル・スクリプト)

チェックアウト時にファイルの改行コード(CR+LF)からCRを取るTclのサンプル・スクリプトです。
このマクロを WinCVS\Macro の下に置いて WinCvs を立ちあげ直すとメニューMacrosに追加されます。

#!CVSGUI1.0 --selection  --name "Update as UNIX text"
#
# SelUpdate.tcl
#
# Requires nkf32.exe and Cygnus tools

set selList [cvsbrowser get]
set selSize [llength $selList]

cvsout "Checkout file as UNIX text file.\n"
cvsout "Total selected : " $selSize "\n\n"
for {set i 0} {$i < $selSize} {incr i} {
        set file [lindex $selList $i]
        cvsbrowser info $file fileInfo

        set name $fileInfo(name)
        set path $fileInfo(path)
        cvsout "Updating $file\n"
        cvs update $name
        cvsout "Doing nkf32 -d -s $file\n"
        exec c:\\usr\\bin\\nkf32 -d -s -O $file $file.new
        exec c:\\usr\\bin\\mv $file $file.org
        exec c:\\usr\\bin\\mv $file.new $file
        exec c:\\usr\\bin\\touch -r $file.org $file
        exec c:\\usr\\bin\\rm $file.org 
        cvsout "$file Done.\n"
}
cvsout "Finished.\n"

付録C (Sambaを使う際の注意)

Sambaサーバ上にリポジトリを作成して使う場合は、
smb.confのoplocksとdelete readonlyのパラメータがYesになっているか確認してください。
Samba の付属ツール testparm で確認できます。

oplocks = yes
delete readonly = yes


WinCvs