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

409

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

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

MatrixFrog
источник
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 будут добавлены к вашему запросу на извлечение.

masukomi
источник
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
Rory O'Kane
источник
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.

VonC
источник
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 в запрос на извлечение.

Кайл Гибсон
источник