Какова правильная конфигурация git для работы с запросами GitHub pull?
я в курсе как я могу проверить запрос GitHub pull?
при добавлении fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
to .git/config
позволяет fetch и checkout, тянуть действия не удается:
[remote "origin"]
url = https://github.com/the/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
Fetch и проверка работают нормально:
$ git fetch origin
... все хорошо!--13-->
$ git checkout -b "pr-123" origin/pr/123
Branch pr-123 set up to track remote branch pr/123 from origin.
Switched to a new branch 'pr-123'
... успех, получил код!
но тянуть не удается:
$ git pull
Your configuration specifies to merge with the ref 'refs/heads/pr/123'
from the remote, but no such ref was fetched.
... неудачный.
я могу указать ref вручную:
$ git pull origin refs/pull/123/head
и это работает. Но как я могу настроить файл config так:
- fetch & checkout все еще работают, и
- последующие действия вытягивания работают без ручного указания удаленного ref?
я обнаружил, что если я редактирую файл config и измените:
[branch "pr-123"]
remote = origin
merge = refs/heads/pr/123
в:
[branch "pr-123"]
remote = origin
merge = refs/pull/123/head # <-- here is the change
... тогда git pull
работает нормально. Как это может быть достигнуто без ручного редактирования файл конфигурации для каждого запроса pull?
4 ответов
вы только получили ветви, а не запросы pull. Добавьте это в свою конфигурацию:
fetch = +refs/pull/*/head:refs/pulls/origin/pr/*
после этого вы можете проверить ветку, которая указывает на PR remote ref:
git checkout -b "pr-123" pulls/origin/pr/123
как правило, вы можете проверить ref, если вы извлекли его из пульта дистанционного управления, поэтому просмотрите git fetch
выведите команду и найдите имя ссылки PR. Это то, что вы должны поместить в . Ты должен кое-что увидеть. например:
[new ref] refs/pull/123/head -> refs/pulls/origin/pr/123
обратите внимание, что вы можете заменить pulls
часть для любого префикса. Теперь вы можете создать ветку и указать на pulls/origin/pr/123
, что эквивалентно refs/pulls/origin/pr/123
(см. git refspec doc).
из спецификаций выборки невозможно найти однозначно найти, что удаленная ссылка refs/remotes/origin/pr/123
трассы origin:refs/pull/123/head
, потому что origin:refs/heads/pr/123
тоже возможно. Чтобы помочь ему, вы можете использовать другое удаленное имя, например:
[remote "origin-pr"]
url = <same as for origin>
fetch = +refs/pull/*/head:refs/remotes/origin-pr/pr/*
тогда git checkout с явным именем ветви (которое должно быть доступно в GUIs) сможет создать правильную ссылку отслеживания:
$ git checkout -b pr/123 origin-pr/pr/123
[branch "pr/123"]
remote = origin-pr
merge = refs/pull/123/head
хотя, похоже, что это невозможно сделать просто git checkout br/123
работы:
$ git checkout pr/123
error: pathspec 'pr/123' did not match any file(s) known to git.
один правильный путь с hub! :)
$ brew install hub
$ hub checkout https://github.com/github/hub/pull/123
...
$ hub pull
Already up-to-date.
Он имеет дополнительные утилиты для работы с GitHub pull-запросы, такие как
hub pull-request
Я думаю, что нашел решение, и это невероятно просто: порядок строк с fetch = +refs...
вопросы!
Я поменял:
[remote "origin"]
url = https://github.com/the/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
в:
[remote "origin"]
url = https://github.com/the/repo.git
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
fetch = +refs/heads/*:refs/remotes/origin/*
(последние две строки поменялись местами)
теперь все работает (fetch
, checkout
, pull
).
Я все еще жду, чтобы увидеть некоторые (ООН)ожидаемых проблем с этой конфигурацией, но до сих пор так хорошо...