Как я могу отфильтровать все запросы на подачу GitHub для конкретной ветки цели
Я работаю над репо GitHub с большим количеством веток и запросов на загрузку.
Скажем, например, что у меня есть следующие запросы на растяжение:
-
a
к ветке X
-
b
к ветке X
-
c
к ветке Y
-
d
к ветке X
-
e
к ветке Y
.
Есть ли способ найти все запросы на тягу, предназначенные для ветки X
(т.е. a -> X
, b -> X
, d -> X
)?
Ответы
Ответ 1
Да, вы можете это сделать.
В терминологии Гитуба "ветвь" является "базовой",
Таким образом, поисковая фраза: is:open is:pr base:X
Официальное описание: Поиск по названиям веток
Дополнительно вы можете добавить фильтры is:merged
или is:unmerged
.
Ответ 2
Начиная с 2016-01-10 это было добавлено в панель поиска gh api, см. следующий ответ.
Исходный принятый (и теперь отключенный ответ) оставлен без редактирования.
В настоящее время недоступно через веб-интерфейс
В настоящее время GitHub не предоставляет способ фильтровать запросы на загрузку своей целевой
через свой веб-интерфейс. Вместо этого все, что вы сейчас получаете, это просто
полный список запросов pull-запросов с именами ветвей темы:
![GitHub Pull-Request UI]()
Нажав на запрос pull, вы увидите целевую ветку, но это не
действительно поможет вам выполнить любую фильтрацию, которую вы хотите сделать.
Вы можете использовать API REST GitHub вместо
Можно фильтровать pull-запросы с помощью GitHub REST API,
Однако:
GET /repos/:owner/:repo/pulls?base=:branch
Это должно показать вам все открытые запросы на возврат для репо :owner/:repo
,
отфильтровывается по запросам, которые нацеливают :branch
как их базовую ветвь. Из
документация:
Фильтр вытягивает имя базовой ветки. Пример: gh-pages
.
Пример Использование cURL
Если у вас есть curl
, вы можете проверить это на публичном репо из
командной строки:
curl https://api.github.com/repos/codecombat/codecombat/pulls?base=master > \
pulls.json
Это вернет ответ JSON следующего вида:
[
{
"url": "https://api.github.com/repos/codecombat/codecombat/pulls/879",
"id": 14955421,
"html_url": "https://github.com/codecombat/codecombat/pull/879",
"head": {
"label": "DanielRodriguezRivero:patch-4",
"ref": "patch-4",
"sha": "baff84f0aeee12f23e3608558ae5341a0b5f939b",
"repo": {
"id": 16202384,
"name": "codecombat",
"full_name": "DanielRodriguezRivero/codecombat"
}
},
"base": {
"label": "codecombat:master",
"ref": "master",
"sha": "5e2f3ac7cb731a6e40e81737a5122c7fe1b746d3",
"repo": {
"id": 15193430,
"name": "codecombat",
"full_name": "codecombat/codecombat"
}
}
}
]
Каждый объект в массиве представляет собой запрос на перенос, отфильтрованный базовой ветвью. JSON фактически содержит гораздо больше
чем это, я просто удалил большую часть этого, чтобы показать соответствующие части
для этого вопроса.
Анализ ответа cURL
Возможно, вы могли бы написать Python/Ruby/PHP/Whatever script, чтобы затем проанализировать свойство html_url
каждого запроса pull-запроса и перечислить его в командной строке. Например, вот простой Ruby script, который будет анализировать вывод ответа JSON, сохраненный с выхода curl
:
require 'json'
json = JSON.parse(File.read('./pulls.json'))
pulls = json.map { |pull| { title: pull['title'], url: pull['html_url'] } }
pulls.each do |pull|
puts pull.values
puts
end
Что выводит следующее:
$ ruby parser.rb
Update es-ES.coffee
https://github.com/codecombat/codecombat/pull/879
Fix deltas referring to last system saved
https://github.com/codecombat/codecombat/pull/874
Refactor getNameById and add naming to systems in deltas
https://github.com/codecombat/codecombat/pull/866
Traducido varios textos del fichero es-ES.coffe al espa├▒ol de Espa├▒a
https://github.com/codecombat/codecombat/pull/865
Anon name collide
https://github.com/codecombat/codecombat/pull/834