最初, 戻る, 進む, 最後, 目次 に行く。


6.3 衝突の例

リビジョン 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 を元にしたあなた自身の作業ファイルは、 次のようになっています:

#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

上記のように、衝突が起きたことが報告されます。 あなたが編集したオリジナルのファイルは、 `.#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/Entries' や関連するところを ハッキングする必要があります。

もしあなたが pcl-cvs (GNU Emacs 用 CVS フロントエンド) の、 1.04 よりも新しいリリースを使用しているならば、衝突を解決するのに `emerge' という Emacs パッケージが利用できます。 pcl-cvs の文書を見て下さい。


最初, 戻る, 進む, 最後, 目次 に行く。