Backup diff of UNIX/コマンド/テキスト処理/diff3 vs current(No. 10)



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);
}
#spandel
#pre2(end)
#spanend
#spanadd

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

自分のファイル変更前のファイル相手のファイル
#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;
}
#spandel
#pre2(end)
#spanend
#spanadd

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

<<<<<<< [自分のファイル]
lines from [自分のファイル]
||||||| [変更前のファイル]
lines from [変更前のファイル]
=======
lines from [相手のファイル]
>>>>>>> [相手のファイル]
#spandel
#pre(end)
#spanend
#spanadd

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

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

% grep '<<<<<<<'

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

参考:Manpage of DIFF3

  • -
    Selection Vote
    役に立った  0 
    まあまあ  0 
    役に立たなかった  0 
    役に立たなかった場合コメントをお願いします。
    URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

}}}

xrea