Как "git-am" применить патч, созданный с помощью "git-format-patch --no-prefix"?
У меня есть причина¹ для создания моего git commit в виде файлов патчей с --no-prefix
вариант. Это изменит вывод в файлах, чтобы пропустить a/
/ b/
префикс в путях к файлам (позволяя такие инструменты, как patch
применять файлы патчей без необходимости прохода -p1
в качестве аргумента).
Теперь, когда у меня есть эти файлы исправлений и используемые мной инструменты теперь понимают их как файлы исправлений, кажется, что я больше не могу применять их с самим Git:
$ git am path/to/0001-patch.patch
Applying: <commit message subject>
error: <path>: does not exist in index
Patch failed at 0001
[...]
Как я могу применить их с git-am
сейчас?
¹ Это позволяет мне использовать его как файлы исправлений в Bazel без пользовательских команд исправлений, так как вам нужно будет применять исправления с patch -p1 [...]
,
2 ответа
git-am
передает несколько вариантов git-apply
, в том числе -p
опция, которая делает то же самое, что и с patch
, Т.е. применять такие патчи с -p0
:
git am -p0 path/to/0001-patch.patch
Было бы здорово, если бы git-format-patch
смог намекнуть git-am
в пределах вспомогательных данных созданного файла исправления, что он должен применять их без предположения префикса пути - так же, как он может намекнуть git-am
с информацией о базовом дереве в настоящее время (см. --base
опция).
The git am -p0
можно проиллюстрировать последним обновлением документации Git 2.41 (второй квартал 2023 г.):
См. (21 марта 2023 г.), сделанный .
(Объединено Джунио С. Хамано ()Джунио К. Хамано --
gitster
-- в коммите a15b845, 30 марта 2023 г.)
коммит 9b0c7f3: обратитесь к патчу формата в документации.
Предложено: Кай Гроссйоханн
Было две причины, по которым мы этого не сделали.
Как "" (man) предназначен для поиска патчей, отправленных по электронной почте, не обязательно взятых из репозитория Git или даже если они получены из репозитория Git и не обязательно созданы с помощью format-patch, мы не хотели выделять его как " благословенный» производитель ввода в команду.
Кроме того, в исходном рабочем процессе, для которого был изобретен «», ожидалось, что пользователем «» будет другой человек, чем пользователи «».Но это очень безопасное изменение, которое можно внести в 2023 году.
Благодаря усилиям многих участников, Git в конечном итоге стал немного популярнее, чем мы изначально думали, и "", на что мне потребовалось несколько недель, чтобы уговорить Линуса принять участие в 2005 году, похоже, стал де-факто стандартный инструмент для создания обновлений по электронной почте.
Интересно, что документация для "" ( ), который указан в
SEE ALSO
в разделе "" документации упоминается "am
" и "format-patch
"как две вещи, которые связаны, но отличаются друг от друга"apply
"в начале.
теперь включает в свою справочную страницу :
Вы можете думать об этом как об обратной операциизапускать на ветке с прямой историей без слияний.
git am
теперь включает в свою справочную страницу :