S-JIS[2003-09-20/2007-10-04] 変更履歴

CVSコマンド一覧

CVSコマンド 概要 更新日
init     管理領域作成 2007-07-21
import     初回登録  
checkout co get 作業ディレクトリ作成  
update up   最新版取得 2007-07-21
commit ci   変更の登録(確定) 2006-05-19
add     ファイル追加 2007-07-21
admin     属性変更  
remove rm   ファイル削除  
annotate ann   ファイル参照 2006-02-25
diff     ファイル比較 /2007-01-10
tag     タグ設定  
rtag     タグ設定 2006-02-25
log     変更履歴参照  
status     ファイル状態参照  
release     作業ディレクトリ削除 /2006-02-25
export     出力  
passwd     ユーザー作成&パスワード変更 2007-03-04
login     CVSサーバーに接続 2007-03-04
logout     CVSサーバーから切断 2007-03-04
history his   操作ログ参照 2007-10-04

cvs init

CVS自体の管理領域(リポジトリ)を作成する。[2007-07-21]
普通はインストール後に一度だけ実行すればよい。別のリポジトリを作りたければ、別ディレクトリを指定して何度でも実行すればいい。

# export CVSROOT=管理領域ディレクトリ名
# cvs init
# cvs -d 管理領域ディレクトリ名 init

cvs import

管理したいソース群をCVS(リポジトリ)に登録する。
登録後、インポートの元となったディレクトリは(CVS管理上はもう不要なので)削除してしまってもよい。

$ cd 管理したいソースの有るディレクトリ
$ cvs import -m'ログメッセージ' プロジェクト名 ベンダータグ リリースタグ
オプション 説明 備考
-m'ログメッセージ' 履歴管理用の初回リリースメッセージ(コミットコメント)。 commit
-W "*.dat -k 'b'" 「拡張子datのファイルをバイナリとして扱う」という指定。「-k 'b'」は、「-kb」でいい。 admin
-I ファイル インポートしたくないファイルを指定。
このオプションで無視されたファイルは、あくまでインポート時に無視されただけ。
(update等では別途指定しない限り、更新対象に含まれる)
cvsignore
プロジェクト名 「パス名/モジュール名」という形式。  
ベンダータグ プロジェクトのベンダー(会社)名。何に使うんだか分からないけど、適当に。 確認方法
リリースタグ 初回リリースバージョン名。このタグが使われる事はあまり無いらしいので、「start」とでも。
$ ls
Test.class  Test.java
$ cvs import -I "*.class" -m'start' user/itest user start
N user/itest/Test.java
I user/itest/Test.class		←無視された

No conflicts created by this import

cvsignore

importupdateadd等の際に無視したいファイルを指定するファイル。
-Iオプションでいちいち無視したいファイルを書かなくていいので、楽。

置き場 説明
$CVSROOT/CVSROOT/cvsignore 全ての処理で参照される。
~/.cvsignore cvsコマンドを実行するユーザーのホームディレクトリ。全ての処理で参照される。
.cvsignore 作業用エリアの、そのディレクトリ内の処理だけで有効。サブディレクトリには影響が及ばない。
$ cat .cvsignore
.cvsignore		←「.cvsignore」自身も入れておかないと、対象になってしまう…対象にしないとcheckoutしたとき消えちゃうけどね
*.jar

cvs checkout 〔オプション〕
cvs co
cvs get

CVS(リポジトリ)に登録されたソース群を、編集作業用に取り出す。

$ cvs checkout 〔-d 作業用ディレクトリ名プロジェクト名
オプション 説明
-d 作業用ディレクトリ名 省略すると、カレントディレクトリの下に「プロジェクト名(パス名/モジュール名)」というディレクトリが作られて、そこにファイルが準備される。
-r リビジョン 過去のソースを取り出したい時に指定。
-D 日付 過去のソースを取り出したい時に指定。その日付時点で最新のファイルでチェックアウトされる。
プロジェクト名 CVSに登録されているインポート時のプロジェクト名。

「CVS」という管理用ディレクトリがそれぞれのディレクトリの下に作られるが、気にしちゃ駄目。それから、消しても駄目。中身を別のファイルで上書きしても駄目。…手動バックアップを戻したりファイル群のコピーの為に削除したりすると、よくやっちゃうんだよね(嘆)


cvs update 〔オプション〕 〔ファイル〕
cvs up

現在のCVS(リポジトリ)に登録されているものと、現在の作業用ディレクトリにあるものを比較する。
リポジトリの方が新しければ、現在の作業用ディレクトリにあるものがリポジトリのものから更新される。

ローカル(現在の作業用ディレクトリ)のファイルを修正したら、現在のCVS(リポジトリ)に登録されているものが自分の修正直前のものであるかどうか確認する 為に、必ずupdateを実行する。
他人が変更してリポジトリにコミットしていた場合、修正箇所が自分の修正箇所と明確に異なるのであれば、update時にCVSがその変更を取り込んでマージしてくれる。(つまりファイルが勝手に書き変わるということなので、それが本当にプログラマーが意図した変更になっているのかは目で確認する必要がある)
もし同じ箇所を修正していたらコンフリクトが発生するので、その分を自分で修正する必要がある。

$ cvs update
オプション 説明 備考
-I ファイル 更新したくないファイルを指定。(通常は全ファイルが対象になるから) cvsignore
-l 現在のディレクトリだけを対象とする。(サブディレクトリを再帰的にチェックしない  
-p ファイルの内容を(ファイルにではなく)標準出力に出力する。  
-r リビジョン そのリビジョンの内容を取り出す。stickyが付く。  
-D 日付 その日付時点で最新の内容を取り出す。stickyが付く。  
-A 今のファイルに付いているstickyを解除する。 ブランチの時は注意
-C 作業ディレクトリでの修正を無視して、強制的にリポジトリの内容を取り出して上書きする。 修正の取消
-j タグ名 ブランチ(やトランク)の修正をマージ(join)する。このオプションを2つ指定すると、その間の修正をマージする。  
-kオプション 作業ディレクトリ上のファイルのkオプションを指定する。  
-d リポジトリにディレクトリが追加されていたら、作業ディレクトリにもそれを追加する
(通常は、作業ディレクトリにあるディレクトリしかチェックされない)
ディレクトリの追加削除
-P リポジトリからディレクトリが削除されていたら、作業ディレクトリからも削除する
(通常は、作業ディレクトリにあるディレクトリは削除されない)

updateを実行すると、チェック対象のディレクトリ名に続いて、変化があったファイルが表示される。
ファイル名の左端の文字が変化の状態を表している。

左端 説明
M 作業用ディレクトリの方が変更されているファイル。
? CVS(リポジトリ)にないファイルやディレクトリ。大抵は後から作業用ディレクトリに追加されたものなので、addで追加する。
A addによって追加された(まだcommitされていない)ファイル。
R removeによって削除された(まだcommitされていない)ファイル。
C コンフリクトが発生したファイル。
U リポジトリから取得されたファイル。

cvs commit 〔オプション〕
cvs ci

$ cvs commit

変更をCVS(リポジトリ)に反映する。コミットする前には、必ずupdateを実行しておく必要がある。

オプションを何もつけないと、ログメッセージ入力のためのエディタが開く。
「CVS」以外の行を挿入し、メッセージを書く。(挿入場所は上でも下でもいい)
複数ディレクトリがコミット対象になっている場合、ディレクトリ毎にエディタが開くので、少々鬱陶しい。

オプション 説明
-m'ログメッセージ' ログメッセージ(コミットコメント)を指定する。
-F ファイル ファイルの中に書かれたものをログメッセージ(コミットコメント)とする。
-f コンフリクトが起きていても、強制的にコミットする。が、あまり使い道があるとは言えない…。
指定されたファイルのみコミットする例)
$ cat files.txt				←コミットしたいファイル群を記述したファイル
Test.java
readme.txt
$ cat log.txt				←ログメッセージを記述したファイル
log test
$ cvs commit -F log.txt `cat files.txt`
Checking in Test.java;
/usr/local/cvs/src/test/Test.java,v  <--  Test.java
new revision: 1.3; previous revision: 1.2
done
Checking in readme.txt;
/usr/local/cvs/src/test/readme.txt,v  <--  readme.txt
new revision: 1.2; previous revision: 1.1
done

通常は、作業ディレクトリのファイルをコミットしても、リポジトリが変更になるだけで作業ディレクトリのファイルは変更されない。
ただしコミットしたファイルがCVSキーワードを使用していてkオプションがkkv(キーワード展開あり)になっていた場合、キーワードの展開はリポジトリ側で行われるような模様。
つまりリポジトリにはキーワード展開されたファイルが保存され、そのファイルが作業ディレクトリに再度取り込まれる(すなわち作業ディレクトリのファイルがコミット時に変更される)ということ。(この際、ファイルの権限が変わるかもしれないので注意)


cvs add ファイル名

ファイルやディレクトリを追加する。

$ cvs add *

ディレクトリはこれだけで追加が完了するが、中のファイルまでは完了しない。ファイルの追加時はコミットが必要。


ディレクトリを追加する場合はaddだけで追加される。(サブディレクトリは再帰的には追加されない。サブディレクトリの下に移動して、再びaddを実行する必要がある)

$ cvs add src		←ディレクトリsrcを追加

ファイルを追加する場合は、addの後でcommitが必要。

$ cvs add file.java
$ cvs commit

なお、コミット前に追加をやめるには、removeを使う。


バイナリとして追加したい場合は、-kbオプションを指定する。

$ cvs add -kb file.class

-kbオプションを指定し忘れてバイナリファイルを追加した場合は、adminで後から指定できる。


複数のファイル・ディレクトリを追加したい場合は、ワイルドカードが使える。

$ cvs add *             ←カレントディレクトリの全ファイル・ディレクトリを追加
$ cvs add *.java
$ cvs add -kb *.class
$ cvs add */*.java

CVS管理用の「CVS」ディレクトリは無視されるので、特別な配慮は必要ない。
既にCVS(リポジトリ)に登録されているファイル・ディレクトリも無視されるので、問題ない。
スキップする旨や既に追加されている旨のメッセージは表示されるけどね…。


cvs admin オプション ファイル

ファイルの属性を変更する。

例えば、ファイルをバイナリ扱いに変更する。

$ cvs admin -kb Test.class	←CVS(リポジトリ)側が変わるだけなので、
$ cvs update -A             作業ディレクトリ側への反映にはupdateが必要
$ cat CVS/Entries
/Test.java/1.1.1.1/Tue Sep 16 02:10:00 2003//
/Test.class/1.1/Tue Sep 16 04:26:42 2003/-kb/
D

↑CVS/Entriesの中に「-kb」が追加されている。ただし、import時に指定した場合は ここには入っていないっぽい。


cvs remove 〔オプション〕 〔ファイル〕
cvs rm

ファイルを削除する。
先にファイルを削除しておく方法と、同時に行う方法の2つのやり方がある。

$ rm ファイル
$ cvs remove
$ cvs commit
$ cvs remove -f ファイル
$ cvs commit

コミット前に削除をやめるには、addを使う。

ディレクトリを削除する時は、中のファイルを先にremoveすること。(-fなら (ファイルだけは)まとめて消せる)
ただし、このコマンドでディレクトリを削除しても作業ディレクトリからは消えない。update -Pを使用すると消える
(CVSではディレクトリを削除できない。ディレクトリを空にすれば作業ディレクトリ上に出てこなくなるので、それで代用する)

$ cvs remove -f ディレクトリ
$ cvs commit
$ cvs update -P         ←これで、作業ディレクトリ上からもディレクトリが消える

cvs annotate 〔オプション〕 ファイル
cvs ann

ソースの表示を行う。[2006-02-25]
各行について、その行がいつのバージョン(リビジョン)で追加(または更新)されたのかが表示される。
(削除された行については表示されない)


cvs 〔-Q〕 diff 〔オプション〕 〔ファイル〕

ソースの比較を行う。

$ cvs diff file
$ cvs diff -c -r リビジョン
$ cvs diff -r 旧リビジョン -r 新リビジョン file
オプション 説明
-c diffの書式が変わる
-r リビジョン 1つも指定しないと、作業用ディレクトリのファイルとCVS(リポジトリ)に登録された最新のファイルとを比較する。
1つ指定すると、作業用ディレクトリのファイルとCVS(リポジトリ)に登録されている指定されたリビジョンのファイルとを比較する。
2つ指定すると、指定されたリビジョン同士のファイルを比較する。
-kk キーワード展開を行わずに比較する。[2007-01-10]
(kオプションを指定することが出来る。-kkは、キーワードのみを残し、値を展開しない)
$ cvs diff -kk -r 1.1 -r 1.2 ファイル
↑2つのリビジョン間で、キーワード展開しない状態で比較される
$ cvs diff -kk -r 1.2
↑ワークとリビジョン間で、キーワード展開しない状態で比較される
$ cvs diff -kk
↑ワーク側がそのままで、リポジトリ側が展開されない状態で比較される

CVSキーワードを無視して2つのワークディレクトリを比較・コピーする


cvs tag 〔オプション〕 タグ 〔ファイル…〕
cvs rtag 〔オプション〕 タグ モジュール…

CVS(リポジトリ)に登録されたソース群に名称(タグ)を付けて、リビジョン番号の代わりに使うことができる。

「cvs tag」は、現在の作業ディレクトリの各ファイルのバージョン(CVS/Entriesに書かれているリビジョン番号を使うらしい)を元に(リポジトリのファイルに)タグを付ける。
「cvs rtag」は、(現在の作業ディレクトリとは関係なく)指定された日時の(リポジトリの)ファイルにタグを付ける。[2006-02-25]

$ cvs tag タグ名

通常は再帰的に全ファイルについてタグを付けるが、一部のファイルだけにタグを付けることも可能。
ただし、そのタグを使ってそのファイル以外のファイルを処理しようとした場合、「タグが付いていない」→「存在しないファイル」→「消してしまえ!」という扱いを受けることがあるので注意。

オプション 説明
-d タグを削除する。
-b ブランチとしてのタグ名を付ける。
-D tomorrow 最新のものに対してタグを付ける。日時に「明日」と指定すれば、最新ということらしい

→付いているタグの確認方法:log, status -v


cvs log ファイル

ファイルの変更履歴を表示する。(リポジトリに記録されている全変更履歴。ブランチトランクでの変更も全て含む)

$ cvs log file  ←「symbolic names」の直後の行にタグ名が出る

今までに付けられたタグの一覧を参照するには、一番最初(インポート時)から存在するファイルのログを参照することで代用する。


cvs status 〔オプション〕 〔ファイル〕

現在の作業用ディレクトリにあるファイルの状態を表示する。
stickyの状態も表示される。

$ cvs status Test.java
===================================================================
File: Test.java         Status: Up-to-date

   Working revision:    1.1.2.8 Wed Oct  1 06:15:29 2003
   Repository revision: 1.1.2.8 /usr/local/cvs/test/Test.java,v
   Sticky Tag:          rel_1 (branch: 1.1.2)   ブランチ
   Sticky Date:         (none)
   Sticky Options:      -kk
オプション 説明
-v そのファイルに付けられているタグ名の一覧も表示する。
ブランチかどうかも分かるので、logより便利かも)
$ cvs status -v build.xml
===================================================================
File: build.xml         Status: Up-to-date

   Working revision:    1.6     Fri Oct  3 09:28:05 2003
   Repository revision: 1.6     /usr/local/cvs/test/build.xml,v
   Sticky Tag:          (none)	トランク
   Sticky Date:         (none)
   Sticky Options:      (none)

   Existing Tags:
        honban                          (branch: 1.4.2)
        start                           (revision: 1.1.1.1)
        vender                          (branch: 1.1.1)

cvs release ディレクトリ

使い終わった作業用ディレクトリを削除する。
このコマンドを使えばコミットが済んでいるかどうかのチェックをしてくれる。

CVSはファイルをロックしているわけではないので、このコマンドを使わずに直接作業ディレクトリを削除してしまっても問題ない。

$ cvs release -d 作業ディレクトリ名
オプション 説明
-d ディレクトリの実際の削除も行う。

cvs export

ソースを出力する。チェックアウトと同じようなものだが、「CVS」という管理用のディレクトリは作られない。

$ cvs export -r リビジョン [-d 出力先ディレクトリ名] プロジェクト名

cvs passwd ユーザー名

CVSNTCVSに接続する為のユーザーの作成 および既存ユーザーのパスワードの変更を行う。[2007-03-04]

> cvs passwd -r osuser -a cvsuser
オプション 説明
-r OS用ユーザーID CVS(サーバー)であるマシン(OS)にログインする為のユーザーIDを指定する。
CVSROOTのディレクトリへの書込権限があるユーザー)
-a 新規のCVSユーザーを追加するときに指定する。

LinuxのCVSでは、Linuxのユーザー/パスワードで、CVSにそのまま接続できる。[2007-07-21]

CVSNTでユーザーを削除する方法


cvs login

CVSに接続する。[2007-03-04]

CVSROOTがpserverのときは、リポジトリーにアクセスする為にはCVSに接続する必要があるので、当コマンドでログインする。
pserverの場合、ログインするユーザー名はCVSROOTに書いてある。
(CVSROOTにユーザーIDが書いていない場合は、CVSサーバーでデフォルトとして設定されているユーザーが使われる?)

CVSROOT=:pserver:cvsuser@localhost:/usr/local/cvs	…ログイン要
CVSROOT=/usr/local/cvs				…ログイン不要(リポジトリーのディレクトリに直接アクセス)

終了するときはログアウトを使用する。


cvs logout

接続しているCVSからログアウトする。[2007-03-04]


cvs history オプション
cvs his

CVSのアクセスログを表示する。[2007-10-04]

この機能を使うには、事前に$CVSROOT/CVSROOTの下に「history」というファイルを作っておく必要がある。
CVSにコミットしたりすると、このファイルに履歴が記録される。

オプションには色々な指定があるので、「cvs his -?」で確認。

>cvs his -m モジュール名 -a		…指定されたモジュールにアクセスした全ユーザーの情報を表示

参考


技術メモへ戻る
メールの送信先:ひしだま