Как мой клиент может применить патч, созданный git diff
без установленного git? Я пытался использовать patch
команду, но она всегда запрашивает имя файла для исправления.
patch
не полностью поддерживает этот формат.
Как мой клиент может применить патч, созданный git diff
без установленного git? Я пытался использовать patch
команду, но она всегда запрашивает имя файла для исправления.
patch
не полностью поддерживает этот формат.
Ответы:
git diff > patchfile
и
patch -p1 < patchfile
работает, но, как многие заметили в комментариях и других ответах, патч не понимает, добавляет, удаляет и переименовывает. Варианта нет, но git apply patchfile
если вам нужно обрабатывать файлы, добавляет, удаляет и переименовывает.
РЕДАКТИРОВАТЬ декабрь 2015
Последние версии patch
команды (2.7, выпущенные в сентябре 2012 года) поддерживают большинство функций формата diff - git, в том числе переименования и копии, изменения разрешений и различия в символьных ссылках (но еще не в двоичных версиях) ( объявление о выпуске ).
Таким образом, при условии, что используется текущая / последняя версия patch
, нет необходимости использовать его, git
чтобы иметь возможность применять его diff как патч.
git diff > patchfile
, ноpatch -p1 < patchfile
relative
опцию, например:git diff --no-prefix --relative=my/relative/path > patchfile
patch -p1 < patchfile
не требует установленного git. Первая команда демонстрирует команду для генерации diff, а не для ее применения.
git diff from_branch > patchfile; git checkout from_branch; git patch -p1 < patchfile
илиgit diff from_branch to_branch > patchfile; ...
использование
git apply patchfile
если возможно.
patch -p1 < patchfile
имеет потенциальный побочный эффект.
git apply
также обрабатывает добавления, удаления и переименования файлов, если они описаны в git diff
формате, что patch
не сработает. И, наконец, git apply
модель «применить все или отменить все», в которой либо применяется все, либо ничего нет, тогда как исправление может частично применять файлы исправлений, оставляя ваш рабочий каталог в странном состоянии.
git apply
это лучший способ сделать это, но этот вопрос специально спрашивает, как применить патч без установленного Git .
--dry-run --verbose
полезны для определения побочных эффектов, если они есть. (используя патч v2.5.8)
git apply patchfile -
... единственный здравомыслящий ответ ..." - это почти смешно. Каждый раз, когда разработчики OpenSSL посылают мне патч для тестирования, Git не может его применить. Это каждый раз. Я еще не видел, чтобы этот тупой инструмент применил патч.
я использую
patch -p1 --merge < patchfile
Таким образом, конфликты могут быть разрешены как обычно.