結城浩
2003年5月22日
CVSでバイナリファイルで「はまった」手順。
file.datを作ったので、cvs add file.datした。
file.datはバイナリファイルだったと気が付いた。
cvs add -kb file.datすると、「すでにaddされてるよ」といわれる。
cvs admin -kb file.datすると、「addしたばかりのものをadminはできない」といわれる。
cvs commitする。
file.datは壊れていない。(※これはウソ)
cvs admin -kb file.datすると、正しく終了する。
cvs commitしようとすると「Up-to-dateチェックに失敗」といわれる。ふみい…どないせいちゅうねん(なぜか大阪弁)。
file.datは壊れていない。
cvs updateする。
file.datによって上書きされてしまうので、file.datが壊れてしまう。
私が行った対処手順(A-9までは同じ)。
copy file.dat backup.datとして現在のファイルを保持しておく。
cvs updateする。
file.datによって上書きされてしまうので、file.datが壊れてしまう。
copy backup.dat file.datする。
cvs commitする。
cvs status file.datを見ると、ちゃんと-kbがついている。
でも、これってどうにも不手際ですよねえ。 上のシーケンスのうち、A-5が悪いのかなあ。 A-5の代わりにエレガントな対処法はあるんでしょうか。
【マニュアル読まんかおれカネゴン】という声が聞こえたので、CVSのヘルプファイルを読んでみる。
おお、ちゃんと書いてあるではないですか。-Aを使うのか…。
file.datを作ったので、cvs add file.datした。
file.datはバイナリファイルだったと気が付いた。
cvs add -kb file.datすると、「すでにaddされてるよ」といわれる。
cvs admin -kb file.datすると、「addしたばかりのものをadminはできない」といわれる。
cvs commitする。
file.datは壊れていない——というのはうそでした。キーワードの展開が行われるので、ここで壊れている可能性がある。
cvs admin -kb file.datすると、正しく終了する。
cvs update -A file.datのように、オプション-Aを使ってupdateすると、無事に復元できる模様。
あ、そういえば、拡張子.datを最初からバイナリファイルだよ、と指定する対処もあったはず。
cvswrappersをいじるのか。ええと…。
後日談
読者の方から、 「addした直後なら、CVS/Entriesを直接編集すればOK」というアドバイスをいただきました。 なるほど! ありがとうございます。