Как мой клиент может применить патч, созданный 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
Таким образом, конфликты могут быть разрешены как обычно.