Вроде file2.c
должно быть:
int b=NULL;
int a;
, а не копия file1.c
.
С этим изменением мы можем понять, что file0.c
является общим предком («база слияния» )для file1.c
и file2.c
, каждая из которых исправляет половину ошибки использования NULL
для инициализации int
переменных.
Если бы изменения не были такими близкими друг к другу, мы могли бы использовать diff3 -m file1.c file0.c file2.c
. Увы, это просто выведет маркер конфликта.
Однако, если мы знаем, что происходит не что иное, как одна -замена строк, то есть линии не добавляются, не удаляются и не перемещаются, а только закрепляются на месте, мы можем получить две дельты 0 -1 и 0 -2, поскольку скрипт ed
отличается от diff -e
. Мы можем сцепить эти сценарии, а затем использовать ed
для их применения.
Во-первых, давайте сделаем копию file0.c
с именем test.c
. Мы попробуем применить эти изменения кtest.c
:
$ cp file0.c test.c
Итак,соберем нашивки в стиле ed
:
$ (diff -e file0.c file1.c ; diff -e file0.c file2.c) > patch
Как они выглядят?
$ cat patch
1c
int b;
.
2c
int a;
.
Это очень похоже на правильные команды для превращения test.c
в желаемый объединенный файл. Чего не хватает, так это wq
для сохранения:
$ echo wq >> patch
Теперь попробуем:
$ 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;
Готово.
Выполнение:
docker run -it pyimg ipython
Подразумевается, что iphython
установлен на вашей операционной системе. То есть на вашем MacOS, как вы заявили. Если iphython
установлен, запустите его с помощью переключателя privileged
:
docker run -it --privileged pyimg ipython