Как применить патч git, если указан номер пула

Я скачал основную версию кодовой базы с git, и есть ошибки сборки. Очевидно, патч уже доступен, и я получил электронное письмо:

см. https://github.com/JustinTulloss/zeromq.node/pull/47 для исправления

Я новичок в git, поэтому я не совсем уверен, что делать с этим «патчем», особенно потому, что страница больше похожа на ветку обсуждения.

Кто-нибудь знает, как я могу получить/применить этот патч к моему локально клонированному репозиторию git?


person Homunculus Reticulli    schedule 19.10.2011    source источник


Ответы (5)


Сохраните патч куда-нибудь. Если вы используете Linux, вы можете использовать curl:

curl -L https://github.com/JustinTulloss/zeromq.node/pull/47.patch > /tmp/47.patch

Чтобы применить патч, используйте git apply. Вы можете увидеть, будет ли патч применяться чисто с опцией check. Перейдите в свой каталог git и запустите:

git apply --check /tmp/47.patch

Если похоже, что вы хотите применить патч, снимите флажок

git apply /tmp/47.patch
person Andrew    schedule 19.10.2011
comment
большое спасибо за инструкции. Я сделал именно так, как вы сказали. Хотя похоже патч не тот. ФМЛ - person Homunculus Reticulli; 19.10.2011
comment
Что делать, если репозиторий частный? В этом случае я получаю (ожидаемый, но бесполезный) 404, когда я curl https://github.com/username/private_repo/pull/42.patch. Я прибегаю к открытию патча из моего браузера и сохранению его (ужас!) - person apocryphalauthor; 21.08.2014
comment
Чтобы поместить коммит (включая имя автора, комментарий коммита и т. д.) в историю, используйте git am, а не git apply. - person Alex D; 13.08.2015
comment
@ Джош, ты действительно озадачил меня, пока я не понял, что ты отвечаешь апокрифическому автору, а не мне. - person Alex D; 07.10.2015
comment
@apocryphalauthor, если репозиторий частный, вы можете загрузить патч из браузера. Просто перейдите к запросу на вытягивание и добавьте .patch в конец URL-адреса. Это загрузит патч в вашем браузере. Затем просто нажмите ctrl-s, чтобы сохранить его. - person Josh; 08.10.2015
comment
К вашему сведению, URL-адрес .patch объединяет все отдельные коммиты в ветке PR (относительно предыдущего коммита в то время) и поэтому может не применяться к текущему мастеру. Вы можете использовать .diff, чтобы получить разницу с текущим мастером. - person rakslice; 07.05.2017

Просто добавьте .patch в конце, чтобы получить патч:

https://github.com/JustinTulloss/zeromq.node/pull/47.patch

Вы можете сделать что-то вроде ниже:

$ git checkout master
$ curl http://github.com/JustinTulloss/zeromq.node/pull/47.patch | git am
$ git push origin master

http://help.github.com/send-pull-requests/

person manojlds    schedule 19.10.2011

Кажется, правило недавно изменилось.

Раньше мы брали PR и добавляли .patch в конце, чтобы получить патч.

http://github.com/[group]/[project]/pull/30583.patch

Но теперь ссылка перенаправлена ​​(301) на

https://patch-diff.githubusercontent.com/raw/[group]/[project]/pull/30583.patch

Поэтому, если вы используете curl, вы можете передать команду git apply, чтобы применить патч git из запроса на включение.

curl https://patch-diff.githubusercontent.com/raw/[group]/[project]/pull/30583.patch | git apply

Если патч вам сейчас не подходит, используйте команду git apply -R для отката изменения.

person gasolin    schedule 18.06.2015
comment
Добавьте аргумент -L к curl, чтобы curl выполнял перенаправления 301/302. - person Sukima; 02.10.2015

Чтобы git загрузил запрос на включение 47 и исправил его в mylocalbranch локально, запустите:

git checkout -b mylocalbranch
git pull origin pull/47/head

Если запрос на вытягивание отсутствует в репозитории источника, запустите

git remote add patchremote https://github.com/JustinTulloss/zeromq.node
git pull patchremote pull/47/head
person thakis    schedule 05.02.2016

person    schedule
comment
Здесь вы только получаете и проверяете PR. OP дополнительно необходимо применить (объединить) PR в свою собственную ветку. Я все равно голосую, так как командная строка fetch очень удобна. - person Alberto; 29.09.2016