WinCVSによるソース管理
CVS入門
CVSとは、Unixで使用されている、複数の人の間でファイルのバージョンを
管理する為のツールです。
WinCVSとは、CVSを、Windows上で、GUIにて使用できるツールです。
元のCVS自体は、コマンドラインツールです。
詳しくは、
関連書籍や、
バージョン管理システム CVS を使う
等を良く読んで下さい。
CVSは非常に高機能で、奥が深いので、最初は戸惑うかもしれませんが、慣れると、とても強力な味方となってくれますので
焦らずにじっくり勉強してください。
大雑把な概念と流れ
CVSはクライアントサーバー(普通のCSとはちょっと違いますが..)でも動作可能ですが、とりあえず、スタンドアロン
で使ってみましょう。
「スタンドアロンで使う」と言うのは、サーバーを単に一つのフォルダとして
扱うと言う事です。それでも、ファイルのロック等は行ってくれますので、複数の人が
同時にアクセスしても大丈夫です。
大まかな流れは、下記の通りです。
- サーバー上にリポジトリを作成する。
- サーバー上に管理したいファイルを登録(インポート)する。
- そのファイルを使用したい人が、サーバーからローカルへ取込む(チェックアウト)。
- ローカルでファイルをテキストエディタ等で編集する。
- サーバーへ変更を反映させる(コミット)。
- サーバーから他の人の行った変更を取り込む(更新)。
4 〜 6 が、通常の作業で頻繁に、繰り返し行われる部分です。
また、cvs には、次のような機能があります。
- 複数の人が同時に同じファイルをチェックアウト可能。
- 同じファイルを別の人が同時に変更してもOK。(テキストファイルのみ)
- 変更履歴を強制的に記述させられるので、履歴管理が可能。
- 変更状態や、変更履歴を表示する事が出来る。
- ソース中に、$Log 等の文字を記述する事により、自動でバージョン情報等を
埋め込む事が出来る。
基本用語解説
リポジトリ
- サーバー側に作成される、cvsで管理する一群のファイルのルートです。
サーバー上の、バージョン管理されたファイルのデータベースだと思えば良いでしょう。
ここには、CVSROOTというバージョン管理情報用のフォルダが作成されます。
リポジトリの下に、ファイルをフォルダで階層化して保存し、バージョン管理を
行います。
通常、リポジトリの作成は、管理者が最初に一度だけ行います。
それ以降、新しいフォルダやファイルを登録するには、追加、もしくは
インポートを使用します。
(まったく別管理のリポジトリを作る場合は別ですが..)
チェックアウト(取込)
4>
- サーバー上からローカルのフォルダにモジュールの複写を作成する事です。
ローカル上での変更作業は、このチェックアウトしたファイルに対して
行い、終了後、コミット(格納)します。
チェックアウトすると、ローカルには、ファイル自体の他に、cvs フォルダが作成されます。
この中には、どのサーバーから取得したか、各ファイルの取得時の更新日等の
cvs が必要とする管理情報が書き込まれています。
一度チェックアウトすると、あとは、そのローカルコピーを変更し、それをサーバーへ
格納、更新を行う事になります。
エクスポート
- チェックアウトと同様に、ローカル側にモジュールの複写を作成しますが、
更新の管理を行いません。単なるコピーを作成します。
モジュール、プロジェクト
- 管理されているフォルダの事です(ほぼ、です)。モジュールはフォルダですから、
配下に子モジュールを持つことが出来ます。
インポート(登録)
- サーバー上に新しいモジュールを作成する事です。
まず、ローカル側に、インポートしたいファイルを用意し、
それを、WinCVSのインポートコマンドでインポートします。
次項で説明する「追加」と違うのは下記の3点です。
- チェックアウトしたフォルダではない場所から行う
- 子ファイルやフォルダも再帰的に登録可能
- 拡張子により、テキストかバイナリか自動で判断させられる
インポートしたファイルを更新するには、いったんチェックアウトする必要があります。
追加
- ファイルやディレクトリを新しくリポジトリに追加することです。
既にチェックアウトされているフォルダ内に新しく作成したフォルダやファイルを
リポジトリに追加し、そのまま作業を続ける場合に使用します。
コミット
- ローカルでの変更をサーバーに反映させる作業です。
更新
- サーバーの変更を、ローカルに取込む作業です。他の人が行った変更をコミットした後、
その変更を自分の環境に取り込むときに使用します。
コンフリクト(競合)
- 同じファイルの同じ場所を別の人が更新してしまった為に、マージ出来ない
状態の事です。
コンフリクトが発生した場合、後からコミットしようとした人に競合が表示されます。
その人が「更新」で取込むと、競合部分が分かる様に取込まれるので、その部分を
手動で変更し、その後コミットします。
マージ
- 同じファイルの別の場所を別の人が同時に更新してしまった場合に、両方の変更を混ぜて
両方とも反映させる事です。
これは、テキストファイルのみに適用可能で、バイナリファイル(WordやPowerPointも含む)には適用されません。
エディット
- ローカル側で編集開始する、と言う宣言を行う事です。
これを行わなくてもリードオンリーを外せば変更してコミットする事も出来ます。
その他
フォルダ削除の操作手順
-
既に作成されているフォルダ(モジュール)を、サーバーから削除するには、下記の手順を行います。
- フォルダ内の、CVSに登録されているファイルをWinCVSの×にて削除します。
- この削除をコミットします。
- CVSに登録されていないファイルとフォルダを、エクスプローラにて手動で削除します。
- 削除したいフォルダのひとつ上のフォルダにて、WinCVSの「更新」を実行します。
これで、削除されます。子のフォルダも削除されます。
ただし、CVSに登録されていないファイルやフォルダが残っていると、削除されません。
cvs release -d フォルダ を使う手もある様です。(これは、ローカルのコピーを削除する方法でした。)
テキストで登録してしまったファイルをバイナリにする
-
WinCVS上でそのファイルがあるディレクトリをアクティブにして、
cvs admin -kb ファイル名
とします。(tclが必要)
バイナリで登録してしまったファイルをテキストにする
-
これは、ちょっと面倒です。
WinCVS上でそのファイルがあるディレクトリをアクティブにして、
cvs admin -kkv ファイル名
とします。
しかし、このコマンドは、リポジトリ上のファイルを変更しますが、作業コピーは、バイナリのままです。
作業コピーをテキストにするには、上記コマンドを実行後、
そのファイルの含まれるフォルダを一旦リリースし、再度更新で取り込む、と言う作業が必要です。
更新するときには、Create missing directories that exist in repository をチェックする必要があります。
リリースは、フォルダ単位でしか出来ません。
リリースコマンドは、
cvs release -d フォルダ
とするか、WinCVSの右クリックメニューに、リリースコマンドを追加できるので、
それを使います。
バージョンを指定してチェックアウトしたい
-
WinCVS上でそのファイルがあるディレクトリをアクティブにして、
cvs update -r n.n
--- n.n は、バージョン
とします。(tclが必要)
更新(update)時に新規に作成されたモジュールを取り込む
-
WinCVS上でそのファイルがあるディレクトリをアクティブにして、
cvs update -d
とします。(tclが必要)
子モジュールに限りますが、こうすると、いちいちモジュールを指定してチェックアウトしなくてすみます。
(新しい WinCVS では、GUIでもこの指定が可能です。)
エクスポート(export)する
-
WinCVS上で、環境設定を正しく行ってから、出力先ディレクトリをアクティブにして、
cvs export -D tomorrow XXXX
とします。(tclが必要) XXXX は、エクスポートしたいモジュールです。
※エクスポートとは、CVSで管理しない、通常の形式でリポジトリの内容を出力する事です。