Как я могу проверить GitHub тянуть запрос с помощью Git?

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

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

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

Ответ 1

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

git fetch origin pull/ID/head:BRANCHNAME

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

git checkout BRANCHNAME

Подробнее читайте в официальной документации GitHub.

Ответ 3

Этот 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'

У вас есть различные сценарии, перечисленные в проблемах 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'

Ответ 4

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

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

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

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

Ответ 5

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

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

git checkout -b test

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

git pull origin pull/939/head:test

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

Ответ 6

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

Ответ 7

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

git checkout <commit number>

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

git checkout 0ba1a50

Ответ 8

Вы можете использовать команду 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

Ответ 9

  1. Откройте пиар на Github. Вверху страницы PR находится номер, который его идентифицирует - 123 и название ветки автора - branch-name. Скопируйте оба из них.
  2. Откройте git bash и убедитесь, что ваш рабочий каталог чист, запустив git status
  3. получить копию пиара, набрав 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

Смотрите полную инструкцию здесь

Ответ 10

Для 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

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

Ответ 11

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

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

Ответ 12

Если вы следуете рабочему процессу "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

Ответ 13

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

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

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

Ответ 14

Если их коммиты находятся на главной ветке их разветвленного репо, то вы можете просто сделать следующее.

git fetch [email protected]:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD