Parece que file2.c
deve ser:
int b=NULL;
int a;
em vez de uma cópia de file1.c
.
Com essa alteração, o que podemos entender é que file0.c
é um ancestral comum (a "base de mesclagem") para file1.c
e file2.c
, cada qual corrigindo metade do erro de usar NULL
para inicializar int
variables.
Se as alterações não estivessem tão próximas, poderíamos usar diff3 -m file1.c file0.c file2.c
. Infelizmente, isso apenas produzirá um marcador de conflito.
No entanto, se sabemos que o que está acontecendo não é nada além de substituições de uma linha - ou seja, nenhuma linha está sendo adicionada, removida ou movida, apenas fixada no lugar - podemos obter os dois deltas 0-1 e 0-2 como ed
script difere com diff -e
. Podemos catenar esses scripts e usar ed
para aplicá-los.
Primeiro, vamos fazer uma cópia do file0.c
chamado test.c
. Vamos tentar aplicar essas alterações em test.c
:
$ cp file0.c test.c
Agora, vamos coletar as correções do estilo ed
:
$ (diff -e file0.c file1.c ; diff -e file0.c file2.c) > patch
Como eles se parecem?
$ cat patch
1c
int b;
.
2c
int a;
.
Isso parece muito com os comandos corretos para transformar test.c
no arquivo mesclado desejado. O que está faltando é o wq
para salvar:
$ echo wq >> patch
Agora vamos tentar:
$ cat test.c
int b=NULL;
int a=NULL;
$ ed test.c < patch
ed test.c < patch
24
14
$ cat test.c
int b;
int a;
Feito.