次: Informing others, 前: Updating a file, 上: 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 の文書を見て下さい。