Як ви додаєте новий запит на тягнення до існуючої проблеми на github?


409

Я не впевнений, але у мене неясна пам'ять про створення запиту на тягу github з "Випуском 4" або чимось у заголовку, і він автоматично приєднався до випуску 4 у проекті, до якого я надсилав його. Я нещодавно спробував її знову, і це не вийшло - просто створив нову проблему. Я не бачу жодних варіантів на зразок "Приєднати до випуску" на новій сторінці запиту на витяг, а також "Відкрити новий запит на виклик для цієї проблеми" на сторінці випуску. Чи можливо це зробити, щоб допомогти власникам проектів утримувати чисті сторінки випусків та уникати дублювання?

Редагування : Для уточнення я знаю, що створення запиту на виклик завжди створює нове питання. Я хотів би замість цього приєднати запит на тягу до наявної проблеми.


1
Я вважаю, що моя відповідь виражає той факт, що потрібної функції ("приєднати запит на виклик до існуючої проблеми") може бути ще не існує.
VonC

Це є (і це насправді підтверджується цим твіттом ), але це також змусило мене зрозуміти, що моє питання могло бути зрозумілішим.
MatrixFrog

Я сподіваюсь, що ця функція є високою у списку пріоритетів github, тому що код, на якому є, не сподобається!
flq

2
Правильну відповідь слід змінити на масукомі, тепер, коли доступний метод "виправлення №1". Не потрібно проходити API.
Едвард Андерсон

Я досі не можу знайти спосіб приєднати запит на притягнення до існуючої проблеми. Я щось пропустив? Відповіді в цій темі, схоже, дозволяють припустити, що ця можливість існує, але я не можу її знайти (вона завжди створює нове питання).
Кевін Джалберт

Відповіді:


245

Проект "хаб" може зробити це:

https://github.com/defunkt/hub

У сховищі та відділенні, на яке потрібно надіслати запит на виклик:

$ hub pull-request -i 4

Для цього використовується API GitHub і додається запит на виклик для поточної гілки до існуючого випуску № 4.


EDIT: Коментар @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встановити з домашньою мовою
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/isissue/189#issuecomment-6353354
Zach

237

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

Просто посилайтеся на проблему у своєму повідомленні про скоєння, використовуючи будь-яке з підтримуваних ключових слів :

  • закрити
  • закривається
  • зачинено
  • виправити
  • виправлення
  • фіксований
  • вирішувати
  • вирішує
  • вирішено

Наприклад: "це виправлення виконує # 116"

Текст, що посилається на проблему, не потрібно містити в темі вашого комітету.

Відправте свою зобов’язання на рефінансування github, і запит на витяг буде автоматично доданий до проблеми.

Примітка. Хоча це не потрібно, настійно рекомендується зробити все, що буде частиною запиту на витяг, до окремої гілки, специфічної для цього питання, оскільки майбутні комісії в цій гілці будуть додані до запиту про витягнення (автоматично github ). Отже, якщо ви не зробили окрему гілку, залишили її на майстер, а потім продовжували розвиватися, то всі ваші непов'язані зобов’язання до майстра будуть додані до вашого запиту на витяг.


31
"настійно рекомендується здійснити все, що буде частиною запиту на виклик, в окрему гілку, специфічну для цього питання, оскільки майбутні комісії в цій гілці будуть додані до запиту на виклик" - дуже хороший момент. Це сталося зі мною одного разу, і це було досить дивно.
MatrixFrog

9
Це, на жаль, не вирішує проблему перетворення проблеми на запит на виклик. Будь-яке обговорення, яке було проведено у питанні, не переноситься на запит на витяг ..., що прикро для кількох випадків використання. Я хотів би, щоб Github просто надав детальний контроль над тим, як працюють pull-reqs в налаштуваннях репо.
Алекс Уотерс

1
@masukomi Запит на виклик легше вирішує керівник проекту - вони можуть прийняти та об'єднати зміни одним натисканням кнопки. Щоб витягнути зміну виделки, не використовуючи запит на потягнення, вам доведеться додати виделку як віддалений, отримати їх зміни та об'єднати їх самостійно.
Rory O'Kane

2
Я думаю, ти пропустив мій погляд Рорі. Якщо ви створите запит на виклик і згадуєте його у випуску (як я запропонував), два з’єднані, і ви все одно можете натиснути кнопку, щоб отримати зміни.
masukomi

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"вилці (" голова ":" smparkes : синхронності ")
  • до masterгілки в technoweenie's fork ("base": " master ")
  • і додайте запит на витяг до випуску 15 ("випуск": 15 )
  • з автором запиту на потяг smparkes((користувач " smparkes ")
  • Вам буде запропоновано пароль GitHub

1
Я скопіював у деякий зразок коду з цього посилання. Сподіваюся, ви не заперечуєте, і, будь ласка, повідомте мене, якщо я це неправильно переклав!
MatrixFrog

3
Вам також потрібна автентифікація, додайте це до команди вище: -u "login: password"
morgoth

2
Я просто хотів би додати, що цей метод все ще працює, але це може мати побічний ефект від того, щоб два рази перерахувати ваші зобов’язання на сторінці обговорення, якщо GitHub це вже неявно підібрав із випуску № у своєму повідомленні ( приклад ). Однак зобов’язання відбувається лише один раз за офіційним запитом на витяг.
Грег Хаскінс

3
Чи можна оновити API v3? GitHub щойно вимкнув API v2.
Майкл Кращий

1
@rsanchezsaez Як я кажу у своїй відповіді , змініть, --user "smparkes:password"щоб --user "smparkes"вам запропонували інтерактивний пароль.
Rory O'Kane


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 імені користувача та мисливця за паролем2 . Ви бачили technoweenie «s репо Фарадея , думав про що - то , що має бути змінено, і зробив питання про це репо для цього, випуск # 15 . Пізніше ви виявите, що ніхто інший не вніс запропоновану вами зміну, і ви також маєте певний час, щоб зробити це самостійно. Ви розщедритися Фарадеем на свій власний рахунок , а потім написати свої зміни і підштовхнути їх до вилки під гілкою з ім'ям синхронності . Ви думаєте, що техновені має тягнути ці зміни до ведучоговідділення його репо. Це команда, яку ви б написали, щоб перетворити попередній випуск у запит на виклик для цієї ситуації:

$ 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 для надсилання запитів на виклик для своєї проблеми.

Це також допомагає використовувати правильний стиль вилки / тяганини.

Редагування: 5.10.2013

Щоб Gub надіслав запит на випуск № 123, потрібно виконати наступне:

$ gub start 123

Це створить нову галузеву проблему-123. Після закінчення роботи над проблемою виконайте:

$ gub finish

Вуаля!

Примітка: Я автор самоцвіту Gub.


1

Замість того , щоб робити це на стороні клієнта (з hub, як Christian Oudard відповідь ), тепер (лютий 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.