
Я хотел бы создать патч из определенной gcc
ветки, сравнив ее с официальными релизами; чтобы при распаковке tarball из стабильного релиза я мог применить патч и получить эквивалент того, что было в этой конкретной ветке.
Это первый раз, когда мне нужно создать патч, так что я делаю это впервые, и моя главная забота — правильно выбрать опции и выполнить синтаксический анализ, поскольку мы говорим о чрезвычайно важной части программного обеспечения.
diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch
Достаточно ли этого и является ли это лучшим способом?
решение1
Да, это хороший способ создать заплатку.
Суммируя:
Чтобы создать патч для одного файла, ваша команда может выглядеть так:
diff -Naru file_original file_updated > file.patch
где
-N
: считать отсутствующие файлы пустыми-a
: обрабатывать все файлы как текст-r
: рекурсивно сравнить все найденные подкаталоги-u
: вывести NUM (по умолчанию 3) строк унифицированного контекста
Чтобы создать патч для всего каталога:
diff -crB dir_original dir_updated > dfile.patch
где
-c
: вывести NUM (по умолчанию 3) строк скопированного контекста-r
: рекурсивное сравнение любых подкаталогов-B
: игнорировать изменения, все строки которых пусты
В конце концов, чтобы применить этот патч, можно запустить
patch -p1 --dry-run < dfile.patch
где switch p
указывает patch убрать префикс пути, чтобы файлы были идентифицированы правильно. В большинстве случаев это должно быть 1
.
--dry-run
Если результат, выведенный на экран, вас устроит, удалите его .
решение2
Если вы хотите сравнить последнюю проверку git с какой-то стабильной версией, просто перейдите git diff the-stable-version
(нужно будет выяснить, какой тег ее описывает, возможно, точный номер версии или какой-то вариант) в репозиторий. git
хранит полную историю проекта (обычно есть способы получить только часть). Неважно, the-stable-version
находится ли она в какой-то другой ветке разработки (например, разработка ответвилась, а стабильная ветка получила некоторые исправления в последнюю минуту).