2007-01-18

CVS で日付をキーにリポジトリ全体の diff を取る

2006 年 4 月 10 日ごろにバグを埋め込んでしまったらしい。そういう時は、CVS で日にちを指定して diff をかけるといい。4/9 と 4/11 の CVS リボジトリ全体の差分を取るには、次のコマンドを実行する。

$ cvs diff -u -D 2006/4/9 -D 2006/4/11

日づけを指定してチェック・アウトする場合は次のコマンドを使う (tc モジュールをチェック・アウトする場合)。

cvs checkout -D 2006/4/9 tc

なお、日付部分には ISO8601 の日付形式が使用可能。例えば、 2006-04-09 20:05 という風に時間まで指定することも可能。

CVS とアトミック・コミット

CVS でファイルの差分を取るのであれば、次のコマンドが使える。

$ cvs diff -r 1.1 -r 1.2 foo.c

これは、foo.c のリビジョン 1.1 と 1.2 の差分を取るコマンド。バグの混入したファイルが、foo.c だけだと分かっている場合は、これで十分。

問題は、バグの入ってるファイルが分からない場合。foo.c かもしれないし、bar.c かもしれない。もしかしたら fuga.c かも...。なんて時は、リポジトリ全体の diff を取ってみるのが手早い。ところが、CVS はファイル個別にリビジョン番号を振るので、リポジトリー全体の差分を (リビジョン番号からは) 取れない。

そこで、「時間 (日付)」をキーにして差分を取る (or チェック・アウトする) 方法が活きてくる。

ちなみに、チェック・アウトの時にリポジトリー全体にリビジョン番号を振る方式を「アトミック・コミット」と呼んでいて、darcsBazaar といった最近のバージョン管理システムが採用している。

No comments:

Post a Comment