%%Title: CVS の使い方
%%Created: Tue Dec 15 12:00:00 JST 1998
%%Updated:
o CVSとは
cvs の 日本語manがあると便利。だけど、原文も見るべし。
Kernel hackerのためのcvs入門 (初心者向け)を参考すると、非常にためになる。と言うか、ここを参考にして以下を書きました :-p。
ここもタメになる。
o リポジトリ
ソース管理を行なうディレクトリのこと。これが無ければ始まらない。
環境変数 CVSROOT に設定。
cvs -d でも指定可。
cvs co した後、ディレクトリに CVS/Root があるとそっちを見てくれる。
o cvs-1.9 を突っ込む。
ftp://ftp.sra.co.jp/pub/gnu/prep/gnu-0.2/src/へんから cvs-*.tar.gz の最新版を拾ってくる。
軽く INSTALL を読む。
% ./configure
% make
% make install
o これだけは覚えよう。
cvs のヘルプは
% cvs --help
cvs のコマンドのヘルプは
% cvs --help command
まず覚えるコマンド
% cvsinit...
% cvsimport...
% cvsco...
% cvsadd...
% cvscommit...
実行しないモード
% cvs -n command ...
o リポジトリを作る。
環境変数 CVSROOT に設定されたディレクトリが
無ければ勝手に作られ、その下に管理用ファイルも勝手に作られる。
% setenv CVSROOT /cvsroot
% cvs init
とか
% cvs -d /cvsroot init
する
o CVS管理したいソースをリポジトリに突っ込む。
% cvs import [-b branch] [-ko] repository vendortag releasetag
カレントディレクトリ以下のファイルを vendortag の releasetag として
repository に登録する。repository は $CVSROOT からみたパスで、無ければ作られる。
以下にマッチするファイルは無視される。
RCSLOG RCS SCCS
CVS* cvslog.*
tags TAGS
.make.state .nse_depinfo
*~ #* .#* ,*
*.old *.bak *.orig *.rej .del-*
*.a *.o *.Z *.elc *.ln core
import に無視するファイルを教えるには -I を使う。
例えば、*.jpg と *.gif を無視したければ。
% cvs import -I '*.jpg *.gif' diary current s981111
各ディレクトリに .cvsignore という名のファイルを作り、
無視したいファイルをリストしておけば、import時にばかりでなく
diff 等でも無視される。
もともとの RCS tag を保存する場合は、-ko オプションをつける。
このままだと未来永劫 $Id: howto-cvs.html,v 1.6 2005/03/14 06:00:31 sakane Exp $ は変わらなくなるので、必要に応じて checkout や add の際 -kkv とかを使う。
でも面倒臭くなるからRCS tag は忘れる方が無難かも。-ko 禁止?
デフォルトの枝番号は 1.1.1 になるので、最初のリビジョンは 1.1.1.1 になる。
これを変更する場合は、-b オプションをつける。
例えば、BSD/OS2.1 patchlevel 27 の ソースをリポジトリ $CVSROOT/sys へ枝番号1.0.0 で突っ込む場合、
% cd /usr/src/sys
% cvs import -ko -b 1.0.0 sys bsdi21 p27
どうなったかと言うと
% ls -a $CVSROOT/sys
./ compile/ kern/ netinet/ scripts/
../ conf/ miscfs/ netiso/ stand/
.MAP,v dev/ msdosfs/ netns/ sys/
PATCHLOG,v i386/ net/ netyips/ ufs/
common/ isofs/ netccitt/ nfs/ vm/
となる。
cvsweb.cgi を使うと.MAPをかっこよく出力できる。
o 自分用作業環境を作る。
% cvs co -b -r tag symbolic_tag modules...
例えば、yips12 用の作業ディレクトリを掘る。
% mkdir $WORKDIR
% cd $WORKDIR
% cvs co -r yips12 sys
CVSROOT を設定するのが面倒だなぁ。
% cvs -d /cvsroot/yips co -r yips12 sys
o ファイルを変更する。
思ううがままに。
o 新たにファイルを追加する。
% cvs add [-ko] files...
例えば xyz.c を追加するならば、xyz.c があるディレクトリに行って、
% cvs add xyz.c
こうすると checkout しているモジュールに xyz.c が追加される。
% cvs commit することで、実際にリポジトリに追加される。
ディレクトリを追加する時も同じ。
例えば、sys/sys/malloc.h の修正をもとに戻す時は、
% cd $WORKDIR
% cvs co -r yips12 sys/sys/malloc.h
o ファイルを削除する。
例えば、xyz.c を削除したい時、xyz.c があるディレクトリに行って、
% rm xyz.c
% cvs remove -f xyz.c
実際には % cvs commit されるまで削除されない。
% cvs remove で消しても % cvs commit を行なう前であれば、また作って % cvs add すれば良い。
ディレクトリの消し方は? -> 消せない!
消されたファイルは、ディレクトリ Attic に移動する。復活させる方法は? --> 人力。
o 作業ディレクトリとリポジトリの差分を取る。
% cvs diff [-r rev1] files...
オプションを何も指定しないと、checkout した時のリビジョンと比較する。
% cvs diff sys
o リポジトリへ修正を繁栄させる。
% cvs commit [-m log_message] [-r revision] file...
今いるディレクトリだけを対象にしたいならば、-l を指定する。
% cvs commit -m 'foge' sys
o 元々のソースツリーから自分用の枝を作る。
% cvs rtag -b -r tag symbolic_tag modules...
$CVSROOT/modules の tag に、symbolic_tag という新しい枝を作る。
例えば、BSDI 2.1 の sys の p27 から yips12 と言う枝を作る。
% cvs rtag -b -r p27 yips12 sys
o タグを付ける。
% cvs tag [-d] symbolic_tag [files...]
作業ディレクトリにあるソースに最も近いリポジトリのリビジョンに対してタグをふる。
rtag のようにタグを振るファイルのバージョンを明示的に指定するのではなく、作業ファイルの履歴を利用する。
タグを削除する時は、-d を使う。
例えば、今 commit した作業ファイルに tag を付ける場合、
% cvs tag yipf1211
o リリースのための diff を作る。
% cvs rdiff -r p27 -r yips12 sys
BSDI のもともとのリビジョンも変わっちゃうけど、どうすんだろう? --> -ko していれば変わらないはず。
commit する前に、作業ディレクトリで
% cvs diff -r p27 sys
すれば良いのだろうか?
それとも、出来た diff ファイルを grep -v 'BSDI $Id:' とかするか?
o 元々のソースのバージョンが上がったら。
releasetag を変えて import する。
例えば、BSDI 3.0 が出た。
% cd /usr/src/sys
% cvs import -ko sys BSDI r30
o ファイルの状態を表示する。
% cvs status -v file
o その他
% cvs export -r[ tag|release ] module
リリース版のファイルを作る。(CVSで管理されない)
% cvs [-d] update
他の開発者が行なった変更をローカルの作業ファイルに反映させる。
% cvs release [-d] module
checkin せずに作業ファイルを削除する。使わなくても良い?
% cvs log [file..]
ファイルのログ情報を出力する。
o これは便利
- 環境設定ファイルをCVS管理する。ノートPC買いかえてもすぐに環境移行できる。
内緒で .ssh も管理しちゃう?
そんときは ssh/random_seed は除くべし。
ただし CVSサーバがクラックされると死ぬ。
- ツール群をCVS管理すると、適当にリリースできちゃう。
- ドキュメントをCVS管理すると、いつでもどこでも編集できちゃう。
- public_html をCVS管理すると、いつでもどこでも編集できちゃう。
画像ファイルは別管理すべし。
- バイナリを repositoryに入れたい時は -koを着ける。
- 共同開発してる時、cvs annotateすると誰がいつその行を編集したか
わかってしまう。
o CVSROOTの中
CVSROOTの中身も cvsで管理されるので、編集するときは
% cvs co CVSROOT
する
% ls -1 CVSROOT
checkoutlist
commitinfo
config
cvswrappers
editinfo
loginfo
modules
notify
rcsinfo
taginfo
verifymsg
編集して cvs commit すると自動的にCVSROOT内を再構築しなおしてくれる。
これ以外にファイルを追加するときは cvs addするが、追加したファイル名を
再構築するリストにも追加しなければならない。checkoutlist に追加する。