結城浩
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」というアドバイスをいただきました。 なるほど! ありがとうございます。