Next: Informing others, Previous: Updating a file, Up: Multiple developers
リビジョン 1.4 の drive.c は次のような内容とします:
#include <stdio.h> void main() { parse(); if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(nerr == 0 ? 0 : 1); }
リビジョン 1.6 では drive.c は次のようになっています:
#include <stdio.h> int main(int argc, char **argv) { parse(); if (argc != 1) { fprintf(stderr, "tc: No args expected.\n"); exit(1); } if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(!!nerr); }
リビジョン 1.4 を元にしたあなたの driver.c の作業コピーは、 ‘cvs update’ の前に次ようになっています:
#include <stdlib.h> #include <stdio.h> void main() { init_scanner(); parse(); if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); }
この時 ‘cvs update’ を実行してみます:
$ cvs update driver.c RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v retrieving revision 1.4 retrieving revision 1.6 Merging differences between 1.4 and 1.6 into driver.c rcsmerge warning: overlaps during merge cvs update: conflicts found in driver.c C driver.c
cvs は上記のように、衝突が起きたことが報告します。 あなたが編集したオリジナルのファイルは、 無修正で .#driver.c.1.4 という名前で保存されます。 driver.c の新しいバージョンは次のようになります:
#include <stdlib.h> #include <stdio.h> int main(int argc, char **argv) { init_scanner(); parse(); if (argc != 1) { fprintf(stderr, "tc: No args expected.\n"); exit(1); } if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); <<<<<<< driver.c exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); ======= exit(!!nerr); >>>>>>> 1.6 }
重複しなかった修正がどの様に作業コピーに組み込まれているか注意して下さ い。 重複した部分は ‘<<<<<<<’, ‘=======’ 及び ‘>>>>>>>’ ではっきりと囲まれています。
ファイルを編集して衝突が起きた部分を解決し、 マークと間違った行を消します。 最終的に次のようになったとします:
#include <stdlib.h> #include <stdio.h> int main(int argc, char **argv) { init_scanner(); parse(); if (argc != 1) { fprintf(stderr, "tc: No args expected.\n"); exit(1); } if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); }
今やこのファイルを格納してリビジョン 1.7 とすることができます。
$ cvs commit -m "Initialize scanner. Use symbolic exit values." driver.c Checking in driver.c; /usr/local/cvsroot/yoyodyne/tc/driver.c,v <-- driver.c new revision: 1.7; previous revision: 1.6 done
衝突が起きたが未解決であるファイルは、安全を考慮して、 cvs が格納することを拒否します。 衝突を解決するとき、ファイルの編集時間を変更する必要があります。 前のバージョンの cvs では、ファイルに衝突マークがないことを確認す る必要もありました。ファイルには正しく衝突マークがあるかもしれませんの で (すなわち、行頭にある ‘>>>>>>> ’ は衝突の印ではありません)、現 在のバージョンの cvs は警告を印字してファイルの格納を実行します。
もしあなたが pcl-cvs (gnu Emacs 用 cvs フロントエンド) の、 1.04 よりも新しいリリースを使用しているならば、衝突を解決するのに emerge という Emacs パッケージが利用できます。 pcl-cvs の文書を見て下さい。