Как прикрепить новый запрос на удаление к существующей проблеме на github?


409

Я не уверен, но у меня есть смутное воспоминание о создании запроса на github pull с «Issue 4» или чем-то в заголовке, и он автоматически присоединяется к Issue 4 в проекте, в который я отправлял его. Недавно я попробовал еще раз, и это не сработало - вместо этого он создал новую проблему. Я не вижу никаких параметров, таких как «Прикрепить к проблеме» на новой странице запроса на извлечение или «Открыть новый запрос на извлечение для этой проблемы» на странице проблемы. Есть ли способ сделать это, чтобы помочь владельцам проектов содержать в чистоте свои страницы «Проблемы» и избежать дублирования?

Изменить : чтобы уточнить, я знаю, что создание запроса на получение всегда создает новую проблему. Я хотел бы вместо этого прикрепить запрос на удаление к существующей проблеме.


1
Я полагаю, что мой ответ выражает тот факт, что нужной вам функции («прикрепить запрос на удаление к существующей проблеме»), возможно, еще не было.
— VonC

Это так (и это на самом деле подтверждается этим твитом ), но также заставило меня понять, что мой вопрос мог бы быть более ясным.
— MatrixFrog

Я надеюсь, что эта функция занимает приоритетное место в списке приоритетов github, потому что этот код очень понравился бы!
— FLQ

2
Правильный ответ должен быть изменен на masukomi, теперь, когда доступен метод «fixes # 1». Не нужно проходить через API.
— Эдвард Андерсон

Я все еще не могу найти способ прикрепить запрос на удаление к существующей проблеме. Я что-то пропустил? Ответы в этой теме показывают, что такая возможность существует, но я не могу ее найти (она всегда создает новую проблему).
— Кевин Джалберт

Ответы:


245

Проект "хаб" может сделать это:

https://github.com/defunkt/hub

В репозитории и филиале, из которого вы хотите отправить запрос на извлечение:

$ hub pull-request -i 4

При этом используется API GitHub и присоединяется запрос на извлечение для текущей ветви к существующей проблеме № 4.


РЕДАКТИРОВАТЬ: Комментарий @atomicules: Чтобы расширить ответ @MichaelMior, полный пример:

$ hub pull-request -i 4 -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE

12
brew install hubустановить с помощью homebrew
— gcamp

11
Это не работает для меня. Сообщает об ошибке при создании запроса извлечения:
— необработанный объект

11
@Rubycut У меня была такая же проблема. Вместо этого я сделал hub pull-request URL_TO_ISSUE, тогда это сработало для меня. Интересно, -i ISSUE_NUMBERработает ли это только в том случае, если проблема находится в том же хранилище (т.
— Е.

30
Чтобы расширить ответ @MichaelMior, приведем полный пример:hub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
— atomicules

4
Обратите внимание, что это работает только для тех проблем, которые вы создали: github.com/defunkt/hub/issues/189#issuecomment-6353354
— Зак

237

Добавить запрос на удаление к существующей проблеме в апстриме легко, если вы разветвляетесь, используя обычные средства github .

Просто укажите проблему в сообщении о коммите, используя любое из поддерживаемых ключевых слов :

  • близко
  • закрывается
  • закрыто
  • исправление
  • исправления
  • фиксированный
  • разрешить
  • сборник законов
  • решены

Например: «этот коммит исправляет # 116»

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

Вставьте ваш коммит в репозиторий github, и запрос на извлечение будет автоматически добавлен к проблеме.

Примечание. Хотя это и не требуется, настоятельно рекомендуется фиксировать все, что будет частью запроса на удаление, в отдельную ветку, специфичную для этой проблемы, поскольку будущие фиксации в этой ветви будут добавляться к запросу на извлечение (автоматически github). ). Итак, если вы не создали отдельную ветку, оставили ее на master, а затем продолжили разработку, то все ваши несвязанные коммиты на master будут добавлены к вашему запросу на извлечение.


31
«Настоятельно рекомендуется фиксировать все, что будет частью запроса на удаление, в отдельную ветку, специфичную для этой проблемы, потому что будущие коммиты в этой ветви будут добавлены к запросу на извлечение» - очень хороший момент. Это случилось со мной однажды, и это было довольно удивительно.
— MatrixFrog

9
Это, к сожалению, не решает проблему превращения проблемы в запрос на извлечение. Любое обсуждение, которое имело место в проблеме, не переносится в запрос на извлечение ... что является неудачным для нескольких вариантов использования. Я хотел бы, чтобы Github просто дал некоторый детальный контроль над тем, как работают pull-reqs в настройках репо.
— Алекс Уотерс

1
@masukomi Сопровождающий запрос легче обрабатывать сопровождающим проекта - он может принять и объединить изменения одним нажатием кнопки. Чтобы вытащить изменение в форке без использования запроса на извлечение, вам нужно будет добавить форк как удаленный, получить их изменения и объединить их самостоятельно.
— Рори О'Кейн

2
Я думаю, ты упустил мою точку зрения, Рори. Если вы создаете запрос на извлечение и упоминаете его в проблеме (как я и предлагал), то оба они связаны, и вы все еще можете нажать кнопку, чтобы получить изменения.
— Масукоми

2
Это не помогает, когда запрос на извлечение происходит постоянно. Наш рабочий процесс состоит в том, чтобы создавать проблемы для идей, а затем извлекать запросы из функциональных веток, как только мы начинаем работать над этими идеями. Закрытие проблемы с помощью коммита в запросе на извлечение означает, что мы теряем предыдущее обсуждение, в котором содержалась проблема, что часто включает хеширование любой функции / исправления / рефакторинга, к которой относится проблема. Что действительно необходимо, так это способ исправить проблему в запросе на извлечение после начала работы над проблемой.
— Даниэль Бингхам

144

Вы можете создать запрос на извлечение из существующей проблемы с помощью API запроса на извлечение :

$ curl --user "smparkes" \
       --request POST \
       --data '{"issue": 15, "head": "smparkes:synchrony", "base": "master"}' \
       https://api.github.com/repos/technoweenie/faraday/pulls

Это создает запрос на извлечение:

  • спросите technoweenieв проекте faraday(https://api.github.com/repos/ technoweenie / Фарадей / тянет)
  • вытащить из synchronyветки в smparkes'fork ("head": " smparkes : synchrony ")
  • на masterветку в technoweenie's fork' ("base": " master ")
  • и приложите запрос на выдачу к проблеме 15 («проблема»: 15 )
  • с автором запроса на smparkesудаление (--user " smparkes ")
  • вам будет предложено ввести пароль GitHub

1
Я скопировал некоторые примеры кода по этой ссылке. Надеюсь, вы не возражаете, и, пожалуйста, дайте мне знать, если я неправильно это перевел!
— MatrixFrog

3
Вам также нужна аутентификация, добавьте это в приведенную выше команду: -u "логин: пароль"
— morgoth

2
Я просто хотел бы добавить, что этот метод все еще работает, но у него может быть побочный эффект, если вы дважды разместите ваш коммит на странице обсуждения, если GitHub уже неявно подхватил его из проблемы # в своем сообщении ( пример ). Тем не менее, фиксация выполняется только один раз по официальному запросу.
— Грег Хаскинс

3
Можно ли обновить это до API v3? GitHub только что отключил v2 API.
— Майкл Бест

1
@rsanchezsaez Как я уже сказал в своем ответе , перейдите --user "smparkes:password"к --user "smparkes"интерактивному запросу на ввод пароля.
— Рори О'Кейн


10

Этот другой ответ объясняет, как использовать cURL ( curl) для создания запроса на извлечение из проблемы через API GitHub . Вот как это сделать, используя HTTPie ( http), который создает более удобную для чтения и редактирования команду:

$ http --auth "<your-GitHub-username>" \
       POST \
       https://api.github.com/repos/<issue-repo-owner>/<issue-repo-name>/pulls \
       issue=<issue-number> head=<your-GitHub-username>:<your-fork-branch-name> base=<issue-repo-branch-name>

Затем введите пароль GitHub, когда будет предложено.

Объясненный пример

Вы вошли в GitHub с именем пользователя smparkes и паролем hunter2 . Вы видели фарадейский репо Technoweenie , подумали о том, что следует изменить, и сделали для этого репо « Проблема № 15» . Позже вы обнаружите, что никто не внес предложенное вами изменение, и у вас также есть время, чтобы сделать это самостоятельно. Вы раскошелиться Фарадеем на свой собственный счет , а затем написать свои изменения и подтолкнуть их к вилке под ветвью с именем синхронности . Вы думаете, что technoweenie должен потянуть эти изменения на мастерафилиал его репо. Это команда, которую вы бы написали, чтобы преобразовать ваш предыдущий выпуск в запрос на извлечение для этой ситуации:

$ http --auth "smparkes" \
       POST \
       https://api.github.com/repos/technoweenie/faraday/pulls \
       issue=15 head=smparkes:synchrony base=master
http: password for smparkes@api.github.com: hunter2

Теперь проблема № 15 - запрос на извлечение.


3

в случае, если вы используете 2-factor-auth с github, вам нужно будет указать authtoken в качестве заголовка в запросе:

curl -u "<your_username>:<your_pw>" \
     --header 'X-GitHub-OTP: <your_authtoken>' \
     --request POST \
     --data '{"issue":"<issue_nr>", "head":"<your_username>:<your_forks_branchname>", "base":"<upstream_branch>"}' \
     https://api.github.com/repos/<upstream_user>/<upstream_repo>/pulls

1
Да, 2FA мешает многим из ответов здесь работать. В моем случае я создал токен личного доступа и использовал его вместо своего пароля, который работает.
— Берто

1

Вы также можете использовать Gub для отправки запросов на удаление по вашей проблеме.

Это также помогает вам использовать правильный стиль fork / pull-request.

Изменить: 5/5/2013

Чтобы Gub отправил pull-запрос на выпуск № 123, вам нужно выполнить следующее:

$ gub start 123

Это создаст новую ветку вопроса-123. Как только вы закончите работать над проблемой, выполните:

$ gub finish

Вуаля!

Примечание: я являюсь автором Gub Gem.


1

Вместо того, чтобы делать это на стороне клиента (с помощью hub, как в ответе Кристиана Оударда ), вы теперь (февраль 2020 года) можете сделать это на стороне сервера (github.com)

См. « Просмотр и связывание проблем и получение запросов с боковой панели »

Теперь вы можете связывать проблемы и получать запросы через боковую панель на соответствующих страницах. Соединения, сделанные здесь, автоматически закрывают проблемы после объединения связанного запроса на удаление.

Документация :https://help.github.com/assets/images/help/pull_requests/link-issue-drop-down.png

И есть API поиска с этой функцией.

Найдите все открытые проблемы в репозитории, которые имеют ссылки на закрывающие запросы на получение с помощью linked:prквалификатора поиска.
Аналогично, найдите все запросы извлечения в репозитории, в которых отсутствует проблема с поддержкой -linked:issue.


0

Используя инструмент git-hub , вы можете сделать это с помощью:

$> git hub pull attach 123

Это преобразовало бы проблему № 123 в запрос на извлечение № 123, тем самым поддерживая все обсуждения проблемы в одном месте.


0

Если у вас включен 2FA, вы можете использовать токен с HTTPie:

http POST \
    https://api.github.com/repos/<repo-owner>/<repo-name>/pulls \
    issue=2 head=issue_2 base=master
    "Authorization:token PUTAUTHTOKENHERE"

Это будет использовать ветку issue_2для преобразования проблемы № 2 в запрос на извлечение.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.