Преобразование контекста diff в унифицированный формат diff - PullRequest
0 голосов
/ 04 мая 2018

Я получил патч в формате diff diff, и мне нужно применить его в Git. Насколько я знаю, Git может применять только патчи в унифицированном формате diff.

Есть ли способ преобразовать контекстный diff в унифицированный формат diff, чтобы я мог git apply модифицированный патч?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вот решение, которое я недавно нашел, когда искал решение той же проблемы. Использование quilt :

dev-util/quilt-0.65::gentoo was built with the following:
USE="-emacs -graphviz" ABI_X86="(64)"

из gentoo, и следующий сеанс командной строки мне удалось безболезненно преобразовать контекстную разницу в унифицированную разницу и настроить уровень полосы (опция -p в патче) с -p0 на -p1 (всегда используйте -p1, ребята, это сделает вашу и чужую жизнь намного проще!)

$ tar xf SDL2-2.0.8.tar.gz
$ cd SDL2-2.0.8
$ quilt new SDL2-2.0.8.unified.patch
$ quilt --quiltrc - fold -p 0 < ../SDL2-2.0.8.context.patch # arbitrary -p0 context diff I created for this exercise
$ quilt refresh
# your new -p1 unified diff can be found at SDL2-2.0.8/patches/SDL2-2.0.8.unified.patch

Ответ на этот вопрос здесь, поскольку это один из самых высоких результатов в Google для запросов, связанных с преобразованием различий в контекстах в унифицированный.

Должен работать в любом дистрибутиве, я просто сообщаю именно то, что имею для потомков.

Только что нашел «лучший» способ, но требует своего рода подготовительных работ. Для этого вам просто нужен сам файл патча. Вам потребуется patchutils

dev-util/patchutils-0.3.4::gentoo was built with the following:
USE="-test" ABI_X86="(64)"

$ $EDITOR SDL2-2.0.8.context.patch
# remove all lines like: 1   diff -cr SDL2-2.0.8/src/SDL.c SDL2-2.0.8.new/src/SDL.c (apparently not needed in current git)
# save and quit
$ filterdiff --format=unified < SDL2-2.0.8.context.patch > SDL2-2.0.8.unified.patch
# you can even do this inside vim with
:%!filterdiff --format=unified

Надеюсь, это поможет!

0 голосов
/ 04 мая 2018

Поскольку git diff можно настроить только на произвести контекстную разницу (или фильтровать для получения одного ), возможный простой подход заключается в используйте patch, чтобы вручную применить эту разницу контекста, затем используйте git add, чтобы обнаружить изменение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...