Хороший ли это способ создания патча?

Хороший ли это способ создания патча?

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

Это первый раз, когда мне нужно создать патч, так что я делаю это впервые, и моя главная забота — правильно выбрать опции и выполнить синтаксический анализ, поскольку мы говорим о чрезвычайно важной части программного обеспечения.

diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch

Достаточно ли этого и является ли это лучшим способом?

решение1

Да, это хороший способ создать заплатку.

Суммируя:

  1. Чтобы создать патч для одного файла, ваша команда может выглядеть так:

    diff -Naru file_original file_updated > file.patch

    где

    • -N: считать отсутствующие файлы пустыми
    • -a: обрабатывать все файлы как текст
    • -r: рекурсивно сравнить все найденные подкаталоги
    • -u: вывести NUM (по умолчанию 3) строк унифицированного контекста
  2. Чтобы создать патч для всего каталога:

    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находится ли она в какой-то другой ветке разработки (например, разработка ответвилась, а стабильная ветка получила некоторые исправления в последнюю минуту).

Связанный контент