it-roy-ru.com

Как я могу проверить пул-запрос GitHub?

Я хотел бы проверить ранее созданный пул-запрос (созданный через веб-интерфейс GitHub). Я искал и нашел разные места, где refs/pull или refs/pull/pr

Но когда я добавляю fetch = +refs/pull/*/head:refs/remotes/Origin/pr/* в файл конфигурации git и делаю git fetch

Что я делаю не так? Должен ли GitHub автоматически создавать файлы pull/xyz или мне нужно что-то настраивать?

147
GarfieldKlon

Чтобы получить удаленный пиар в вашем локальном репо,

 git fetch Origin pull/ID/head: BRANCHNAME 

где ID - это идентификатор запроса на выборку, а branchname - имя новой ветви, которую вы хотите создать. После того, как вы создали ветку, просто

 git checkout BRANCHNAME 
215
timbo

Это принесет вам без необходимости называть ветку:

git pull Origin pull/939/head

Как я могу получить конкретный запрос на тягу на моей машине?

89
Steven Penny

The Gist описывает, что произошло, когда вы делаете git fetch:

Очевидно, измените URL-адрес github, чтобы он соответствовал URL вашего проекта. В конечном итоге это выглядит так:

[remote "Origin"]
    fetch = +refs/heads/*:refs/remotes/Origin/*
    url = [email protected]:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/Origin/pr/*

Теперь загрузите все запросы на извлечение:

$ git fetch Origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> Origin/pr/1000
 * [new ref]         refs/pull/1002/head -> Origin/pr/1002
 * [new ref]         refs/pull/1004/head -> Origin/pr/1004
 * [new ref]         refs/pull/1009/head -> Origin/pr/1009
...

Чтобы проверить конкретный пул-запрос:

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from Origin.
Switched to a new branch 'pr/999'

У вас есть различные сценарии, перечисленные в Issues 259 , чтобы автоматизировать эту задачу.
Проект git-extras предлагает команду git-pr (реализовано в PR 262 )

git-pr (1) - локально проверяет пулл-запрос

СИНТАКСИС

git-pr <number> [<remote>]
git-pr clean

ОПИСАНИЕ

Создает локальную ветвь на основе номера запроса GitHub и затем переключается на эту ветвь.

Имя пульта, из которого можно получить данные. По умолчанию Origin.

ПРИМЕРЫ

Это проверяет запрос извлечения 226 от Origin:

$ git pr 226

remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
  * [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'
40
VonC

Я предпочитаю получать и извлекать без создания локальной ветки и находиться в отключенном состоянии HEAD . Это позволяет мне быстро проверить пулл-запрос, не загрязняя мою локальную машину ненужными локальными ветками.

git fetch upstream pull/ID/head && git checkout FETCH_HEAD

где ID - идентификатор запроса извлечения, а upstream, где был создан исходный запрос извлечения (например, это может быть Origin).

Я надеюсь, что это помогает.

19
Andrew Ymaz

Ссылаясь на ответ Стивена Пенни, лучше всего создать тестовую ветку и протестировать PR. Так вот, что бы вы сделали. 

  1. Создайте тестовую ветку, чтобы объединить PR в локально. Предполагая, что вы находитесь на главной ветке:

git checkout -b test

  1. Получить изменения PR в тестовую ветку

git pull Origin pull/939/head:test

Теперь вы можете безопасно протестировать изменения в этой локальной ветке тестирования (в данном случае с именем test ) и, как только вы будете удовлетворены, можете как обычно объединить их с GitHub.

10
bholagabbar

Если вы используете Github.com, перейдите в раздел «Запросы на извлечение», щелкните соответствующий запрос на извлечение и затем нажмите ссылку «Инструкции для командной строки»:  command line instructions at Github.com

8
AmitB

Вы можете использовать команду git config, чтобы записать новое правило в .git/config для извлечения запросов извлечения из хранилища:

$ git config --local --add remote.Origin.fetch '+refs/pull/*/head:refs/remotes/Origin/pr/*'

А потом просто:

$ git fetch Origin
Fetching Origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
 * [new ref]         refs/pull/2/head -> Origin/pr/2
 * [new ref]         refs/pull/3/head -> Origin/pr/3
5
SummerBreeze
  1. Откройте пиар на Github. В верхней части страницы PR находится номер, который его идентифицирует - 123 и название ветки автора - branch-name. Скопируйте оба из них.
  2. Откройте git bash и убедитесь, что ваш рабочий каталог чист, запустив git status
  3. получить копию PR, набрав git fetch upstream pull/<id>/head:<branch>. В этом примере вы должны ввести git fetch upstream pull/123/head:branch-name
  4. Теперь, когда у вас есть копия ветви, переключитесь на нее, используя git checkout branch-name. Ваш каталог теперь будет точной копией PR. Обязательно сообщите автору о любых ошибках или предложениях, так как вы не можете добавить свои собственные изменения непосредственно к запросу.
  5. Когда вы закончите проверять их работу, используйте git checkout master, чтобы вернуться к вашей локальной версии Project Porcupine

Смотрите полную инструкцию здесь - https://github.com/TeamPorcupine/ProjectPorcupine/wiki/How-to-Test-a-Pull-Request#testing-someone-elses-pull-request

5
yoAlex5

Я случайно закончил тем, что написал почти то же самое, что и git-extras. Поэтому, если вы предпочитаете одну пользовательскую команду вместо установки нескольких других дополнительных команд, просто поместите этот файл git-pr где-нибудь в вашем $PATH, и тогда вы можете просто написать:

git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1
4
Johannes Ewald

Для Bitbucket вам необходимо заменить слово pull на pull-requests.

Во-первых, вы можете подтвердить стиль URL-адреса запроса на получение с помощью команды git ls-remote Origin

$ git ls-remote Origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae    refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e    refs/pull-requests/1503/merge
...

Как видите, это refs/pull-requests/1503/from вместо refs/pull/1503/from

Тогда вы можете использовать команды любого из ответов. 

4
osexp2003

Проблема с некоторыми из вышеперечисленных опций заключается в том, что если кто-то выдвигает больше коммитов в PR после открытия PR, они не дадут вам самую последнюю версию .. Для меня то, что сработало лучше всего - перейти в PR, и нажмите 'Commits', прокрутите до bottom, чтобы увидеть самый последний хеш коммита  enter image description here , а затем просто используйте git checkout, т.е.

git checkout <commit number>

в приведенном выше примере

git checkout 0ba1a50

3
Ariel Gabizon

Если вы следуете рабочему процессу «github fork», где вы создаете форк и добавляете удаленный репозиторий upstream:

14:47 $ git remote -v
Origin  [email protected]:<yourname>/<repo_name>.git (fetch)
Origin  [email protected]:<yourname>/<repo_name>.git (Push)
upstream        [email protected]:<repo_owrer>/<repo_name>.git (fetch)
upstream        [email protected]:<repo_owner>/<repo_name>.git (Push)

чтобы перетащить в вашу текущую ветку ваша команда будет выглядеть так:

git pull upstream pull/<pull_request_number>/head

чтобы вытащить в новую ветку код будет выглядеть так:

git fetch upstream pull/<pull_request_number>/head:newbranch
3
init0

Я использую Hub, инструмент от GitHub: https://github.com/github/hub

С хабом проверить запрос на локальный доступ довольно просто:

hub checkout https://github.com/owner/repo/pull/1234
or
hub pr checkout 1234
0
Daniel Wehner