Как применить патч `git diff` без установленного Git? - PullRequest
275 голосов
/ 05 августа 2010

Как мой клиент может применить патч, созданный git diff без установленного git? Я пытался использовать команду patch, но она всегда запрашивает имя файла для исправления.

Ответы [ 5 ]

412 голосов
/ 05 августа 2010
git diff > patchfile

и

patch -p1 < patchfile

работают, но, как многие заметили в комментариях и других ответах, патч не понимает добавления, удаления и переименования.Варианта нет, но git apply patchfile, если вам нужен дескриптор добавления, удаления и переименования файлов.


РЕДАКТИРОВАНИЕ Декабрь 2015

Последние версии команды patch(2.7, выпущено в сентябре 2012 г.) поддерживает большинство функций формата diff - git, включая переименования и копии, изменения разрешений и различия в символьных ссылках (но пока не бинарные различия) (выпуск )объявление ).

Таким образом, при условии использования текущей / последней версии patch нет необходимости использовать git, чтобы иметь возможность применять его diff в качестве патча.

73 голосов
/ 23 марта 2011

попробуйте это:

patch -p1 < patchfile
49 голосов
/ 31 июля 2013

Использование

git apply patchfile

если возможно.

patch -p1 < patchfile 

имеет потенциальный побочный эффект.

git apply также обрабатывает добавления, удаления и переименования файлов, если они описаны в формате git diff, что patch не подойдет. Наконец, git apply - это модель «применить все или отменить все», в которой либо применено все, либо ничего, тогда как исправление может частично применять файлы исправлений, оставляя ваш рабочий каталог в странном состоянии.

6 голосов
/ 16 июня 2015

Я использую

patch -p1 --merge < patchfile

Таким образом, конфликты могут быть разрешены как обычно.

0 голосов
/ 20 марта 2011

Попробуйте это:

$ git apply file.diff
...