Я хотел бы создать патч из конкретной gcc
ветки, сравнивая его с официальными релизами; поэтому, когда я распаковываю tarball из стабильной версии, я могу применить патч и получить эквивалент того, что было в этой конкретной ветке.
Это первый раз, когда мне нужно создать патч, поэтому я делаю это в первый раз, и моя главная задача - правильно настроить параметры и выполнить синтаксический анализ, поскольку речь идет об очень важной части программного обеспечения.
diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch
Это достаточно и лучший способ сделать это?
gcc
из официальной стабильнойtar.bz2
и еще одна нестабильная версия изgit
репозитория, я хотел бы создать патч, конечно, я бы хотел сравнить только сmaster
веткой, а не со всем репозиторием.tar.bz2
явно неgit
репозиторий, как вы думаете, я должен продолжить?Ответы:
Да, это хороший способ создать патч.
Короче говоря:
Для создания патча для одного файла ваша команда может выглядеть так
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
: игнорировать изменения, все строки которых не заполненыВедь чтобы применить этот патч можно запустить
Параметр where
p
указывает, что patch должен удалить префикс пути, чтобы файлы были правильно идентифицированы. В большинстве случаев так и должно быть1
.Удалите,
--dry-run
если вы довольны результатом, напечатанным на экране.источник
dir_updated
сравнению с тем, что было вdir_original
? Обdiff
этом тоже позаботятся или его пропустят?file.patch
просто в текстовом файле, так что вы можете открыть его в любом редакторе или просто вcat
нем, и вы увидите строку вродеonly in dir_original: missingfile.txt
patch
удалит этоmissingfile.txt
или что еще?diff -N ...
как в моем первом примере. Обычноpatch
удаляет пустые файлы по умолчанию. Если вы не хотите, просто используйте толькоdiff -crB
как в вашем вопросе. Также в некоторых (редких) случаях-E
опция вpatch
команде необходима для удаления пустых файлов после руководства по исправлению:if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
diff -Naru dir/file dir/file.new > diff.patch
получениеcan't find file to patch at input line 3
сpatch -p0 --dry-run < diff.patch
первой строкой патча, читает--- dir/file
вторую+++ dir/file.new
с метками времени, разница, кажется, просто правильная, есть ли какая-либо опция, как сообщить точные имена файлов, которые ищет команда?