$ cvs -d リポジトリ co -d ディレクトリ モジュールリポジトリからモジュールをチェックアウトし、指定されたディレクトリに展開する。ディレクトリはCVS管理下に入る。Microsoft Visual SourceSafe(以下MS-VSS)では最初にソースを取得する動作に相当する。この操作は最初にモジュールのソースを取得するときのみ行う。既にソースを取得してある場合、以後のファイル更新はアップデートで行うことになる。
リポジトリはCVSROOT環境変数でも指定できるが、通常、チェックアウトの時だけしか指定しないのと、CVSROOT環境変数では複数のリポジトリを設定できないので、コマンドラインで指定したほうがよいだろう。ディレクトリを指定しないと指定したモジュール以下の構造がカレントディレクトリに生成されるが、これはあまり意図した動作ではないだろう。
ローカルにあるリポジトリを使う場合はリポジトリのパスを指定すればよい。 他のホストにあるリポジトリを使う場合はいくつか書き方があるが、sshトンネルでアクセスする場合は環境変数CVS_RSHにsshを設定し、:ext:user@host:/path/to/repository の形で指定する。
$ cvs ciカレントディレクトリ以下のファイルをチェックインする。コミットとも呼ばれる。MS-VSSのチェックインと同じ。ちなみに、CVSにはMS-VSSのチェックアウトという概念はない。リポジトリ他のデータはCVSというサブディレクトリに格納されているため、チェックインはこれだけでよい。
CVSEDITOR環境変数で指定したエディタが立ち上がり、そこに変更されたファイルが書かれているので、これを参考にしてログメッセージを書き、メッセージを保存・エディタを終了すると、チェックイン動作が行われる。チェックイン動作を中断したい場合、メッセージを破棄・エディタを終了すると、どういう動作を行うかたずねられるので、[A](Abort)を選択すればよい。
$ cvs upカレントディレクトリ以下のファイルをアップデートする。MS-VSSで既にソースがある場合に最新版を取得したのと同じ動作になる。一度チェックアウトしていないと使えない。リポジトリ側に新たにディレクトリが増えた場合、そのディレクトリはデフォルトでは取得対象にならない。以下のように-dをつけてアップデートする。
$ cvs up -d
$ cvs -q upとりあえずアップデートしてみればよい。アップデートを行うと作業を行ったファイル一覧が出力されるが、先頭にアルファベットなどが付いている。先頭がUなのはリポジトリから全体を取ってきたファイル、Pは一部を取ってきてパッチを当てたファイルで、Mがリポジトリの内容と異なるファイルである。-qを指定しておくと余計な出力が抑制され、多少出力が見やすくなる。
ビルド時の中間ファイルなど、明らかに登録する必要のないファイルは、.cvsignore
というファイルにワイルドカードを使って書いておくとよい。
同様のファイルはいろいろな方法で指定できるが、作業ディレクトリに置くのが一番楽。
サブディレクトリにも置ける。
(06 Nov 2018)
$ cvs diff -u [ファイル名] ...リポジトリ中の最新と、作業ディレクトリの内容の差分を見る。一人で作業している場合は前回のチェックインから何を変更したか? を見ることができる。-u は出力形式で、Unixのdiffコマンドと同じオプションを使う。個人的にはここで指定している -u が見やすいくてよいだろう。タグを指定することもできる(後述)。
$ cvs add [-kb] 追加するファイル等一覧指定したファイル・ディレクトリをリポジトリに追加する。カレントディレクトリが既にCVS管理下にある場合に用いる。カレントディレクトリがリポジトリ管理下にない場合はimportを使う。追加するファイル・ディレクトリは既に存在している必要がある。ファイルはその後、チェックイン操作を行うまでは実際にリポジトリに登録されないので注意。ディレクトリの場合はcvs addを実行するとCVSディレクトリが作成され、CVSの管理下に入る。cvs up で未登録ファイル一覧を吐き出させると楽。addの場合、ワイルドカードを使うとCVSIGNOREが効かないので注意。
バイナリファイルを登録するときには-kbオプションを指定する。このオプションを指定しないとキーワード展開が起き、バイナリファイルが壊れることがあるので注意。
なお、ディレクトリを追加する場合、リポジトリのあるマシンに直接アクセスできるなら、リポジトリ側に空ディレクトリを作ってチェックアウトや-d付きでupしてもよい。リポジトリのルートに何か追加する場合などはこの方が楽なことが多い。
$ cvs remove 削除するファイル指定したファイルをリポジトリから削除する。削除するファイルはあらかじめ消しておく必要がある。ファイルはその後、チェックイン操作を行うまではリポジトリから削除されないので注意。実際にはリポジトリから削除されるのではなく、Atticというディレクトリに移動される。
$ cvs -d リポジトリ import モジュール名 ユーザー名 startカレントディレクトリ以下のディレクトリ構造・ファイルをリポジトリに登録する。カレントディレクトリがCVS管理下にない場合、つまり、初めてモジュールを登録する場合に用いる。ユーザー名とstartはあまり重要ではない。このコマンドを実行しても、カレントディレクトリはCVS管理下にはならない。改めてチェックアウトを行う必要がある。
$ cvs log ファイル名CVSのログはファイルごとに管理されているため、ログを見たいファイルを明示的に指定する必要がある。 全部のファイルのログをまとめてみたい場合は
cvs2cl
(CVS to ChangeLogの略)のようなツールに頼る必要がある。
$ cvs tag タグ名カレントディレクトリ以下のディレクトリ構造・ファイル全てにタグを付ける。
$ cvs log -h なるべく古いファイルコマンドの意味は「指定されたファイルのログを取得し、ヘッダ部分のみ表示する」という意味だが、ログのヘッダ部分にタグ一覧が入るため、これで目的が達成される。指定したファイルを追加した時点より後のタグしか表示されないため、全てのタグを表示したい場合は一番初期に追加したファイルを指定する必要がある。逆に、最近のタグだけを見たいならファイル名は適当でよい。
なお、タグ名がタグなのかブランチなのかはレビジョンで判断する。1.3.0.6のように3つ目の数字が0になるのはブランチ名である。このブランチ上のレビジョンは1.3.6.12のようになり、ブランチ名についたレビジョンの4つ目の数字が、ファイルレビジョンの3つ目にくる。ブランチからブランチを生やすとさらに数字が2つ増えるが、見方は同じ。
$ cvs -d リポジトリ co -d ディレクトリ -r タグ モジュール-rでタグを指定してチェックアウトすればよい。タグ名がブランチ名だった場合を除き、この方法で取得したファイルはチェックインできないことに注意。最新に戻すには cvs up -A を実行する。
((作業ディレクトリのルートに移ってから)) $ cvs up -r タグ
こちらは作業ディレクトリの内容を指定したタグに切り替える。 作業ディレクトリのルートに移ってから実行しないと、ブランチが混ざった状態になるので注意。 よく分かっていないのなら別の場所にチェックアウトしてしまった方が安全。 (04 Nov 2018)
$ cvs diff -u -r タグ [ファイル名] ... $ cvs diff -u -r タグ1 -r タグ2 [ファイル名] ...一つ目は指定したタグと作業ディレクトリの内容を、二つ目は指定した二つのタグのファイルの内容を比較する。ファイル名を省略すればカレントディレクトリ以下全てのファイルの差分を取ってくれる。リダイレクトしてファイルにすれば、UnixやCygwinのpatchコマンドに渡すことができる(パッチファイル)。先方にちょっとした変更を適用してもらう場合に便利である。
$ cvs -q diff -u -r タグ1 -r タグ2 | grep "^Index:"diff出力の各ファイルの先頭に、
Index: dir/filename.cppといった出力があることを利用した技。-qで不要なメッセージを抑制している。特定のバージョン間でどれくらいのファイルが変更されたかを調べる時に便利。
$ cvs tag -b ブランチ名 $ cvs tag -b -r タグ名 ブランチ名前者はあらかじめブランチを切りたいバージョンを取得しておき、その作業ディレクトリで実行する。取得したバージョンを根とするブランチができる。後者は現在の作業ディレクトリの内容は関係ない。指定したタグの位置を根とするブランチができる。ブランチは後から任意の位置を根として作れる。このコマンドを実行したからといって作業ディレクトリがブランチに切り替わってしまうわけではないので注意。別の場所にブランチをチェックアウトしてから作業するのが確実。
$ cvs -d リポジトリ co -d ディレクトリ -r ブランチ モジュールタグ名がブランチ名になっただけ。どちらが指定されたかはCVSが自動的に判断してくれる。ブランチ名を指定すると、タグを指定した場合と異なり、1.そのブランチの最新版を取得する(ブランチの根が取得されるわけではない)、2.チェックインが可能な作業ディレクトリができる、という動作になる。
タグと同様、cvs upで切り替えることもできる。 (04 Nov 2018)
$ cvs log -rブランチ ファイル名
-r
とブランチ名の間にスペースを入れてはいけない点に注意。
$ cvs up -j マージ開始タグ -j マージ終了タグマージを適用したい作業ディレクトリで行う。タグは一つだけでもよく、その場合はマージ開始位置から開始タグのあるブランチの最新版までの差分が作業ディレクトリにマージされるが、マージ終了位置を明確にする意味でも、マージ元ブランチに一度タグを打ってから作業した方がよい。マージ終了位置は次のマージの時に必要になる(開始位置として指定することになる)。
マージ結果は作業ディレクトリのみに反映される。どのようにマージされたかは cvs diff で分かる。コンフリクトするとファイル中にコンフリクトマーカーが現れるので、適切に修正し、動作に問題がなければ cvs ci でチェックインし、マージ結果をリポジトリに反映させる。
$ cvs stat 適当なファイル
こんな表示が出る。
$ cvs stat index.htm =================================================================== File: index.htm Status: Up-to-date Working revision: 7.24.2.1 Repository revision: 7.24.2.1 /usr/local/cvs/www/index.htm,v Sticky Tag: tag_2015_oldsite (branch: 7.24.2) Sticky Date: (none) Sticky Options: (none)
Sticky Tagにブランチ名が出ている。 何かファイルを指定しないとそのディレクトリにある全部のファイルのステータスを一気に表示するので注意。
Copyright (C) 2005-2018 akamoz.jp
$Id: cvs-cmd.htm,v 1.11 2018/11/06 03:19:24 you Exp $