diff3 - 3つのファイルの差異の表示


diff3 コマンドdiff コマンドと違い、3つのファイル間の差異を表示します。 例えば、ある1つのファイルがあり、 自分がそのファイルに変更を加えたと同時に、他の人もそのファイルに変更を加えていた場合、その差異を表示、というより変更をマージするために使用します。

% diff3 [自分のファイル] [変更前のファイル] [相手のファイル]

のように実行すると差異を表示できます。

% diff3 -m [自分のファイル] [変更前のファイル] [相手のファイル]

のように実行すると、[変更前のファイル]から[相手のファイル]への変更を[自分のファイル]にマージした内容を表示できます。

例えばファイルの内容が以下のような場合、

自分のファイル変更前のファイル相手のファイル
#include<stdio.h>
main(){

int a=5;
int b=5;
printf("%d\n",a-b);
}
#include<stdio.h>
main(){

int a=2;
int b=5;
printf("%d\n",a-b);
}
#include<stdio.h>
void main(){

int a=2;
int b=5;
printf("%d\n",a-b);
}
% diff3 -m [自分のファイル] [変更前のファイル] [相手のファイル]

では、

#include<stdio.h>
void main(){

        int a=5;
        int b=5;
        printf("%d\n",a-b);
}

のようにマージされた出力がでます。 もしもファイルの内容が以下のような場合、

自分のファイル変更前のファイル相手のファイル
#include<stdio.h>
int main(){

int a=5;
int b=5;
printf("%d\n",a-b);
return 0;
}
#include<stdio.h>
main(){

int a=2;
int b=5;
printf("%d\n",a-b);
}

#include<stdio.h>
void main(){

int a=2;
int b=5;
printf("%d\n",a-b);
}

#include<stdio.h>
<<<<<<< [自分のファイル]
int main(){
||||||| [変更前のファイル]
main(){
=======
void main(){
>>>>>>> [相手のファイル]

int a=5;
int b=5;
printf("%d\n",a-b);
return 0;
}

のように出力されます。 自分の変更箇所と相手の変更箇所が同じで衝突が起こった場合、

<<<<<<< [自分のファイル]
lines from [自分のファイル]
||||||| [変更前のファイル]
lines from [変更前のファイル]
=======
lines from [相手のファイル]
>>>>>>> [相手のファイル]

のような部分がでてきます。 こうなってしまった場合はしょうがないので手動で手直しする必要があります。

この衝突箇所があったかどうかは、

% grep '<<<<<<<'

のようにしてとりあえずは調べられると思います。

参考:Manpage of DIFF3

xrea