表題 cvs の基本的な使い方 履歴 石渡 正樹 2004/05/01 ○ レポジトリの新規作成 cvs で管理される資源の格納場所(御本尊)はレポジトリと呼ばれる. レポジトリの作成作業は最初に 1 回だけ行えば良く, 編集・更新 作業は後述の「通常の編集作業」に記述されたことを行えば良い. 1. まずレポジトリの初期化をする 例) % cvs -d /GFD_Dennou_Club/dc-arch/prepri/00inprep/snowball/cvsroot init これで指定したディレクトリの下に CVSROOT というディレクトリが作られる. CVSROOT には基本的な設定を指定するファイル達が置かれる. 2. 次に, 新規プロジェクトの登録をする. 新規のプロジェクト(正式にはmodule という)の登録するためのコマンドは 以下の通り. 例) % cvs import -m "Initial Dirs" gt4f90io gtool4 initial ↑ ↑ ↑ ↑ コメント プロジェクト名 | リリースタグ || | ディレクトリ名 | || ベンダー モジュール名 「No conflicts created by this import」 というような メッセージが出れば, インポート成功. 例) カレントディレクトリに入っている資源をローカルマシン上のレポジトリに 登録するなら % cvs -d /GFD_Dennou_Club/dc-arch/prepri/00inprep/snowball/cvsroot import snowball momoko start 例) カレントディレクトリに入っている資源をリモートマシン上のレポジトリに 登録するなら % export CVS_RSH=ssh % cvs -d :ext:momoko@dennou-k.gfd-dennou.org:/GFD_Dennou_Club/dc-arch/prepri/00inprep/ebm_nha92-rad/CVSROOT import ebm_nha92-rad momoko start ○ プロジェクト(module)の削除 正しくはどうしたら良いのかわからん. レポジトリのmodule ディレクトリを rm -r する? ○ 通常の編集作業 レポジトリが作成された後は, 協同作業でレポジトリの中身を更新して いくことができる. たいていの場合, 以下の手順をとれば良かろう. 0. 環境設定 リモートホストのレポジトリがある場合には(dennou サーバのレポジ トリを使う場合など), $ export CVS_RSH=ssh として, 環境変数 CVS_RSH を設定しておく. これで, レポジトリが 存在する計算機との交信に ssh が使われる. 1. 編集作業用ディレクトリの作成 最初にレポジトリから資源を持ってくる事を checkout という. checkout は作業ディレクトリを作成する最初だけで良い. checkout するとプロジェクト名のディレクトリが作成される. 例) リモートホストにレポジトリがある場合は以下のようにする. オプション -P は cvs 登録されている空のディレクトリを checkout しないためのオプションである. % cvs -d:ext:hogehoge@dennou-k.gfd-dennou.org:/GFD_Dennou_Club/ftp/arch/riron/cvsroot checkout -P mhd 例) ローカルホストにレポジトリがある場合は % cvs -d /GFD_Dennou_Club/ftp/arch/riron/cvsroot checkout -P mhd 例) ブランチした資源を入手するには -r オプションを使う. % cvs -d :ext:momoko@dennou-k.gfd-dennou.org:/GFD_Dennou_Club/dc-arch/gate/cvsroot checkout -r dennou gate-toroku-system 2. 資源の更新 資源の編集作業を行う前には必ず, update をした方が良い. update のもっとも簡単な方法は % cd ~/(作業領域) % cvs update である. 以上で, 他人の編集内容が自分の作業領域に反映される. もしもディレクトリが新たに追加されている場合には -d オプション を用いて % cvs update -d としなければ作業領域に反映されない. さらに空のディレクトリを削除したい場合には -P オプションを用いる. したがってお勧めの一般的な update 方法は % cvs update -dP である. 3. commit 資源を編集・更新した場合には, commit する. これにより レポジトリに更新内容が反映される. commit のもっとも簡単な方法は % cd (作業ディレクトリ) % cvs commit -m 'コメント' である. コマンドを実行すると, そのディレクトリのファイルだけ でなくサブディレクトリも再帰的にコマンドが実行され, レポジトリへ 反映される. commit はこまめにするのが良い. 4. 資源の編集 ・新たなファイル, ディレクトリを作成したときには cvs add とする 例) 新たに, newfile というファイル, あるいはディレクトリを作成した場合 % cd ~/(newfileの存在する作業領域) % cvs add newfile % cvs commit -m 'add newfile' cvs commit しないと, ファイル追加がレポジトリに反映されない. 例) バイナリファイルを add する場合 % cvs add -kb hoge.gif % cvs commit -m 'add image file' ・ファイルを削除した時には cvs remove とする. 例) rmfile を削除する場合 % cd ~/(rmfileの存在する作業領域) % rm rmfile % cvs remove rmfile % cvs commit -m 'remove rmfile' 例) -f オプションを使えば同じ手順を一度に行なうことができる. % cd ~/(rmfileの存在する作業領域) % cvs remove -f rmfile % cvs commit -m 'remove rmfile' ・ディレクトリを削除するには以下のようにする. 例) hogehoge ディレクトリを消す場合. % cd hogehoge % cvs rm -f * % cvs commit -m "..." % cd .. % cvs update -P 実際には, ディレクトリは cvs 登録から削除することはできない. ディレクトリ内を空にしておくことにより, update, checkout した ものにおいてディレクトリを削除するだけである. 空にして消した後に再び同名のディレクトリを作成したい場合には 以前消したことを気にせず新たに add すれば良い. 例) % mkdir hogehoge % cvs add hogehoge % cd hogehoge % (file を作って add, commit) このようにしてあらたにディレクトリを作られても, 以前空にするまでの記録がそのまま保持されている. 同名のファイルを作っても記録が追加されるだけで大丈夫. ・ファイルとディレクトリの名前を変更する. 例) % mv oldname newname % cvs remove oldname % cvs add newname % cvs commit -m "renamed oldname to newname" oldname newname 5. タグ タグをつける. 例) % cvs -q tag Release-4_1-2003_10_16 なお, タグは, 各プログラムにつけられるもので, プロジェクトに付く ものではないことに注意. どのようなタグがつけられているかは, 格納されているファイルの どれかを log オプションで見ると分かる. タグを付けた際にそのファイルが無かったのなら, そのファイルに タグは付かないので注意. 例) % cvs log gtool_history.f90 この時の出力例は以下. RCS file: /GFD_Dennou_Club/ftp/arch/gtool4/cvsroot/gtool4/src/gtool_hi story.f90,v Working file: gtool_history.f90 head: 1.28 branch: locks: strict access list: symbolic names: <== これがタグを示すもの Release-1_0-2003_10_09: 1.28 dc_string-first: 1.6 <─┐↑ isovst-last: 1.5 <──タグの数々 start: 1.1.1.1 <────┘| dcstaff: 1.1.1 <────┘ keyword substitution: kv : 6. その他 ・変更された内容をチェックする. 例) % cvs diff index.html ・任意の日時の内容をcheckout する. 例) % cvs -d :ext:momoko@dennou-t:/GFD_Dennou_Club/dc-arch/prepri/00inprep/snowball/cvsroot checkout -p -D"2002-11-21" snowball |& more ・ 削除したファイルの復帰 まず, 復帰しようとするファイルの履歴を見てみる. % cvs log <復帰するファイル> |less これで, 最新版の revision ナンバーを確認して % cvs -Q up -p -r <最新版の一つ前の revision ナンバー> <復帰するファイル> > <復帰するファイル> とする.「最新の revision ナンバー」は消した際のものが当てはまるので, 指定しても何も帰ってこないので注意. ・ 作業ディレクトリを作らずに取り出す. (開発ディレクトリとしてではなく, プログラムのパッケージとして取り出す) 例) リリースタグを用いた方法 % cvs -q export -r Release-_1-2003_10_16 gt4f90io 例) 日付を用いた方法 % cvs -q export -D "2003-11-11" gt4f90io 最新版を取得したいのなら, 「明日」の日付で export を行うと良い. ・作業が終って作業領域を消す. 例) % cvs release -d project ・特定のファイルの特定のバージョンを呼び出す 例) % mv file1.c file1.c.bak % cvs update -p -r 1.3 file1.c > file1.c ○ レポジトリのパーミッション レポジトリ (cvsroot ディレクトリ) のパーミッションを正しく 設定しておかないと, 他人が checkout できなくなったりする. 各ディレクトリのパーミッション設定で, グループに sbit を立て ておくが良い. 例) drwxrwsr-x morikawa gtool4 4096 2月 10 01:50 gt4f90io/ ^ [ここが重要] パーミッションを変更するには以下のようにする. 例) % cd (レポジトリのディレクトリ) % chmod 2775 gt4f90io