Windows上でCygwin版CVSを使う場合は、改行コードに気を使った方がいい(後述)。
追加の場合は最初にディレクトリをチェックアウトしておく必要があるが、リポジトリにディレクトリがなければそもそもチェックアウトができない。 こんなときはリポジトリ側にディレクトリをmkdirで作ってしまってチェックアウトするとよい。 リポジトリを直接操作できれば、の話だが。
チェックアウトしたら、普通に編集し、終わったらチェックイン cvs ci する。 これでリポジトリに反映され、他のマシンから更新することで変更されたファイルを取得できる。 逆に、他のマシンでチェックインされたファイルを取得したい場合は更新 cvs up を行う。
詳しくは CVS - よく使うコマンドを参照。
他によく使うのは $Log$ だが、これは少し特殊で、例えば // $Log$ と書いておくと、その行から下にチェックインするたびにずらずらとログが入る。 そのときに各行の先頭に $Log$ の前に書いてある文字列が入る。 つまり、この例だと各行の先頭が // になる。 C++などのコメントとしてソースに埋め込む場合に便利である。
ここからパーミッションをいぢってもよい。意味があるのはr/x/sビット。wは何をやっても意味がない。CVSはRCSファイルを読み、消し、新しく書き込む(だけらしい)ので、ディレクトリにwがあれば、RCSファイルにwがなくてもチェックインはできる。tは試してない(し、使えたとしてもあんま意味がない気がする)。パーミッションはその後のciでも保存される。
ディレクトリをaddすると、リポジトリ側では常に775でできあがるので、アクセスに制限をかけたい場合はあとで適宜変更する必要がある。リポジトリをCVSで読む場合でもディレクトリへの書き込み権限が必要(ロックファイルを作るから)なことに注意。これはつまり、読み出し専用のアカウントは普通にやったのでは作れないということも意味している。
ちなみに、LinuxとBSDでは新たにディレクトリを作った場合のグループが違うので注意。Linuxでは作った人(プロセス)の実効GIDで作成される。setgidした場合は親ディレクトリのGID。BSDは常に親ディレクトリのGIDになる。さらにさらに、BSDの場合はディレクトリがsetuidされていると以下のファイル・ディレクトリは全部親ディレクトリのUIDで作成される(いろいろ制限があるようですが)。LinuxでCVS使ったことないからCVSで実際にどうなるかは知らん。
その後のciやupなどでは、作業ファイルの変更が生じた時にパーミッションが上記のルールで変更される。だから、$Id$ などのRCSキーワードが入っていなければチェックインしてもパーミッションは元のまま。入っているとキーワード展開時にパーミッションが変更される。
ディレクトリの場合は777にumaskを適用したものになる。リポジトリのパーミッションは一切無視。770や750な作業ディレクトリを作りたい場合は、チェックアウト後に手でパーミッションを変更する必要がある。
こういう細工をしてなかった場合や、リモートからローカル・ローカルからリモートに変更になった場合:
$ for i in `find . -name CVS`; do echo 新しいリポジトリの位置 > $i/Root; done
リポジトリのパスが変わった場合:
$ for i in `find . -name CVS`; do echo 新しいリポジトリパス > $i/Repository; done
この作業をやってくれるcvschrootというコマンドがあるらしい(使ったことないけど)。 (27 Dec 2015)
$ for i in `find path/to/dst -name CVS`; do rm -rf $i; done $ cvs co -d path/to/tmp module $ cd path/to/tmp $ for i in `find . -name CVS`; do mv $i path/to/dst/$i; done $ cd path/to/dst
あとは普通にup・diff・ciができる。リポジトリと作業コピーで内容が違うファイルはupするとタイムスタンプに関係なくM表示になる。全部リポジトリの内容にしたい場合は cvs up -C する。
c:\> mount -t c:\cvs\src /home/cvs/src (Cygwin 1.5・コマンドプロンプトの場合) c:\> mount -t -u c:\cvs\src /home/cvs/src (同上。Admin権限なし) $ mount -t c:\\cvs\\src /home/cvs/src (Unixシェルの場合)マウント状態はレジストリに保存される。umountしない限り電源を切っても保持されている。 Cygwin 1.7からマウントのルールが変わったので、Cygwinのページを参照のこと。 特に、コマンドプロンプトからのマウントは意味をなさなくなったので注意。
テキストマウントしたパス以下では、fopenなどでモードを指定しなかったファイルに対し改行コードの変換が行われる。モードを指定すればモードに従う。Cygwin版のcvsは、-kbを指定すると明示的にバイナリモードを使うようになり、そうでなければモード指定をしないようになっている。したがって、バイナリファイルは -kbを指定してリポジトリに登録すれば正しく扱える(忘れるとファイルが壊れる)。
JISは文字列展開マークの$が文字コード空間内にあるため使用しない方が無難。
エディタは /tmp/ほげほげ という引数を伴って立ち上げられるため、Windows上のプログラムにはオプションに見えてしまう。また、このパスはCygwin内のパスなので、これをWindows内のパスに変換する必要がある。Cygwinにはcygpathというコマンドがあり、-wオプションを付けてCygwinのパスを与えると、Windowsのパスに変換してくれる。例えば、cygpath -w /tmp/test とすると、c:\cygwin\tmp が返ってくる。これをUnixシェルのバッククオート置換で使えばOKである。たとえば、こんなシェルスクリプトを作る。
#!/bin/sh "/cygdrive/c/program files/hidemaru/hidemaru.exe" `cygpath -w $*`これをパスの通った位置にcvs-hidemaruなどという名前で置き、CVSEDITOR環境変数にcvs-hidemaruを設定すればよい(ちなみにこのスクリプトだとエディタが終了するまでスクリプトは待たされる=cvsは作業を先に進めない)。文字コードの統一については、rcsinfoで指定したテンプレートに意図的に日本語を仕込んでおき、文字コードを自動判別できるエディタを使えばよい。Windowsのメモ帳を使っている場合はSJISに統一することになるだろう。
これを利用するといろいろ便利に使える。
例えば、一時的に古いレビジョンのファイルを見たい場合、古いレビジョンを見たいファイルを秀丸で開く(もちろんこれは最新のファイル)。次に、見たいレビジョンを確認する。$Log$キーワードを使ってログメッセージを展開している場合、ログメッセージを見れば分かるだろう。
分かったら、今ファイルを開いている秀丸で「その他」→「プログラム実行」とし、「コマンドライン」に「cvs up -p -r 取得したいレビジョン 取得したいファイル」と入力する。CVSはカレントディレクトリのリポジトリを使うので、今見ているファイルと同じリポジトリを見に行く。-pを付けると取得結果は標準出力に書き出されるよになる。つまり、結果は新しい秀丸の窓に吐き出される。コマンドプロンプトやリダイレクトのお世話にならず古いレビジョンのファイルを見ることができるので非常に便利である。
あとはお好みで「その他」→「ファイルタイプ別の設定」でファイルタイプを選んで「保存しないで更新」すると見やすくなるだろう。さらに、「ウィンドウ」→「他の秀丸と内容比較」を使うと簡易diffにも使える。秀丸マクロの内部値キーワードbasenameを使い以下のようなマクロを組むとさらに便利になる。
$rev = input("レビジョンを指定してください"); run "cvs up -p -r " + $rev + " " + basename;
diffの場合は、cvs -Q diff -u を実行すると diff の結果を新しい秀丸の窓に吐き出してくれる。強調表示を併用して、ハイフンで始まる行をグレー表示、+で始まる行を強調表示にするとdiff表示が非常に見やすくなる。
また、
golinetop2; beginsel; golineend2; copy; right; beginclipboardread; run getclipboard;こんなマクロをexec.macという名前で作っておくと、マクロを実行したときにカーソルがある行をコマンドとみなして実行してくれる。例えば、cvs -q up を実行すると追加されていないファイルが ? で表示されるので、これをコピペして編集して、頭に cvs add を付けてさらに exec.mac に突っ込むと、必要なファイルだけを一気に追加できる。Mが出てるファイルのうち一部だけをチェックインしたい場合も同様にできる。
リポジトリをタダの共有ファイルにすれば、UnixマシンがなくてもCVSは使える。Unixマシンからこのリポジトリを見たい場合は、smbmountするか、そもそもUnixマシンが使えるのだから、リポジトリ全体をUnixマシンに移せばよい。
> cvs -d /mnt/マシン名/cvsdb init
この後、サーバーフォルダを確認するとよかろう。あとは普通に使える。
> net use ドライブ名: \\マシン名\資源名 /user:Winドメイン名\ユーザ名
Winドメインを運用していない場合はユーザー名だけでよい。ローカルとリモートのパスワードが一致していれば、自動で割り当てが行われる。
Copyright (C) 1997-2015 akamoz.jp
$Id: cvs.htm,v 1.13 2018/10/27 05:42:25 you Exp $