Как я могу отфильтровать все запросы на вытягивание GitHub для определенной целевой ветки

Я работаю над репозиторием GitHub с множеством веток и запросов на включение.

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

  • a в филиал X
  • b в филиал X
  • c в филиал Y
  • d в филиал X
  • e в филиал Y.

Есть ли способ найти все пул-реквесты, предназначенные для ветки X (то есть a -> X, b -> X, d -> X)?


person AVIDeveloper    schedule 12.12.2013    source источник
comment
Вы должны обновить принятый ответ.   -  person tacaswell    schedule 10.01.2016


Ответы (4)


Да, ты можешь сделать это.

В терминологии Github ветка to является базовой. Таким образом, поисковая фраза: is:open is:pr base:X

Официальное описание: Поиск по названиям веток

При желании вы также можете добавить фильтры is:merged или is:unmerged.

person Andor Dávid    schedule 30.08.2015
comment
Добро пожаловать в StackOverflow. Если вы можете добавить команды к своему ответу, это сделает его лучше. :) - person Drazisil; 30.08.2015
comment
это новая функция! более подробную информацию можно найти по адресу: help.github.com/articles /поиск-вопросов/ - person Markomafs; 01.09.2015
comment
К сожалению, это соответствует всем веткам, начинающимся с X. Кто-нибудь знает, как искать конкретную ветку, а не префикс? - person yoyo; 27.05.2017
comment
Чтобы указать ветку head, что означает: ветвь, из которой идет PR, а не слияние с TO, используйте head:my_branch вместо base:my_branch. См.: docs.github.com/en/github/searching-for-information-on-github/. - person Gabriel Staples; 20.02.2021
comment
Важно: поиск здесь (например: repo:my_username/my_repository is:open is:pr base:my_branch) ДОЛЖЕН выполняться в строке поиска PR здесь (github.robot.car/ pulls), НЕ в общей строке поиска GitHub в левом верхнем углу почти любой страницы GitHub! - person Gabriel Staples; 20.02.2021
comment
Я разъяснил это и написал пользовательские поисковые запросы Chrome. Вот мой ответ: stackoverflow.com/a/66287268/4561887. - person Gabriel Staples; 20.02.2021

По состоянию на 10 января 2016 года это было добавлено в API панели поиска gh, см. следующий ответ.

Первоначальный принятый (и теперь уже устаревший ответ) остался неотредактированным.


В настоящее время недоступно через веб-интерфейс

В настоящее время GitHub не предоставляет возможности фильтрации запросов на вытягивание по их целевой ветке через веб-интерфейс. Вместо этого все, что вы сейчас получаете, — это просто весь список пулл-реквестов с названиями тематических веток:

Интерфейс запросов на включение GitHub

Щелкнув по запросу на включение, вы увидите целевую ветку, но на самом деле это не поможет вам сделать какую-либо фильтрацию, которую вы хотите сделать.

Вместо этого вы можете использовать GitHub REST API

Можно фильтровать запросы на вытягивание с помощью GitHub REST API однако:

GET /repos/:owner/:repo/pulls?base=:branch

Это должно показать вам все открытые пул-реквесты для репозитория :owner/:repo, отфильтрованные по запросам, которые нацелены на :branch в качестве своей базовой ветки. Из документации:

Отфильтруйте запросы по имени базовой ветки. Пример: gh-pages.

Пример использования cURL

Если у вас есть curl, вы можете проверить это в общедоступном репозитории из командной строки. Здесь запрашивается репо (https://github.com/codecombat/codecombat) , и мы получаем все запросы на вытягивание из ветки base (ветка, с которой объединяются PR) с именем master, а затем сохраняем результаты в файле pulls.json, который мы проанализируем дальше.

curl https://api.github.com/repos/codecombat/codecombat/pulls?base=master > \
pulls.json

Это вернет ответ JSON следующего вида, который теперь хранится в файле pulls.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"
      }
    }
  }
]

Каждый объект в массиве представляет собой запрос на вытягивание (PR), отфильтрованный по ветке base=target, которую мы указали как master в нашей команде curl выше.

JSON на самом деле содержит гораздо больше информации, чем это; Я только что удалил большую часть этого, чтобы показать соответствующие части для этого вопроса.

Разбор ответа cURL

Вероятно, вы могли бы написать скрипт Python/Ruby/PHP/Whatever, чтобы затем анализировать свойство html_url каждого запроса на включение и перечислять его в командной строке. Например, вот простой скрипт Ruby, который будет анализировать вывод ответа 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
person Community    schedule 21.04.2014
comment
Я добавил примечание о том, что этот ответ устарел, не решаясь удалить весь ваш первый раздел. - person tacaswell; 10.01.2016

Как искать PR по ветке "от (head)", "до" (base) и по автору, включая выполнение этого с помощью пользовательских поисковых систем Chrome, которые можно быстро активировать в строке поиска:

Примечание. Приведенный ниже поиск PR (Pull Requests) на GitHub предназначен для выполнения в строке поиска PR здесь (https://github.com --› запросы на вытягивание вверху) (прямая ссылка: https://github.com/pulls), нет в общей строке поиска GitHub в верхнем левом углу почти любой страницы GitHub, хотя они могут работать и там.

См. также мой ответ здесь: Могу ли я искать github метки с логическим оператором ИЛИ?

На жаргоне GitHub ветвь, из которой вы объединяете, — это ветвь head, а ветвь, с которой вы объединяете, — это ветвь base. См. здесь: https://docs.github.com/en/github/searching-for-information-on-github/searching-issues-and-pull-requests#search-by-branch-name. Я не уверен, почему они не выбрали вместо них from_branch и to_branch, так как их было бы легче запомнить.

1. Найдите все PR ОТ my_branch с head:my_branch:

is:open is:pr archived:false head:my_branch

При желании также укажите репозиторий:

is:open is:pr archived:false repo:some_username/some_repository head:my_branch

2. Найдите все PR, входящие в TO my_branch с base:my_branch:

is:open is:pr archived:false base:my_branch

При желании также укажите репозиторий:

is:open is:pr archived:false repo:some_username/some_repository base:my_branch

3. Ссылки:

  1. #P6#
    #P7# #P8#
    Qualifier               Example  
    ---------------------   -------------------------------------------------
    `head:HEAD_BRANCH`      `head:change is:closed is:unmerged` matches pull 
                            requests opened from branch names beginning with 
                            the word "change" that are closed.
    
    `base:BASE_BRANCH`      `base:gh-pages` matches pull requests that are 
                            being merged into the gh-pages branch.
    
  2. ответ @Андора Давида здесь

4. ПРОДОЛЖАЕМ: добавьте собственные поисковые системы Google Chrome для поиска на GitHub.

Для тех, кто не знает, браузер Chrome позволяет создавать собственные поисковые системы. Если я зайду в строку поиска своего браузера и наберу gto, а затем Пробел или Tab, затем наберу имя моей ветки, my_branch, я увижу это. Я буквально ищу все открытые PR, объединяющие ветвь TO my_branch, используя мою систему пользовательского поиска, запускаемую ярлыком gto, который я настроил:

введите здесь описание изображения

Вот как их настроить:

В Chrome нажмите на 3 точки в правом верхнем углу --› Настройки --› Поисковая система (на левой панели) --› Управление поисковыми системами --› в разделе Другие поисковые системы нажмите кнопку Добавить. Настройте его следующим образом: введите сюда описание изображения

Нажмите Сохранить, когда закончите. Вот 3 моих любимых:

  1. Search for GitHub PRs merging TO a given branch:
    1. Search engine: GitHub PRs merging TO branch
    2. Ключевое слово: gto
    3. URL-адрес с %s вместо запроса: https://github.com/pulls?q=is%3Aopen+is%3Apr+archived%3Afalse+base%3A%s
  2. Search for GitHub PRs merging FROM a given branch:
    1. Search engine: GitHub PRs merging FROM branch
    2. Ключевое слово: gfrom
    3. URL-адрес с %s вместо запроса: https://github.com/pulls?q=is%3Aopen+is%3Apr+archived%3Afalse+head%3A%s
  3. Search for GitHub PRs BY a certain author:
    1. Search engine: GitHub PRs BY this User
    2. Ключевое слово: gby
    3. URL-адрес с %s вместо запроса: https://github.com/pulls?q=is%3Aopen+is%3Apr+author%3A%s+archived%3Afalse+

Способ, которым вы определяете, что добавить для строки поиска URL, на самом деле довольно прост: вы просто заходите на GitHub и выполняете поиск вручную с помощью инструментов GitHub, затем копируете и вставляете URL-адрес, заменяя строку поиска, которую хотите найти. для с %s в пользовательском URL поисковой системы Chrome. Вот и все! Этот процесс работает для всех без исключения веб-сайтов, которые сохраняют свои переменные поиска в URL-адресе после того, как вы выполняете пользовательский поиск на их веб-сайте, а это многие, если не большинство веб-сайтов с возможностью поиска.

person Gabriel Staples    schedule 20.02.2021

Теперь, когда интерфейс командной строки GitHub доступен, вы можете сделать это для данного репозитория.

Вы можете установить gh CLI, следуя соответствующим инструкциям для вашей ОС и предпочитаемого менеджера пакетов.

Я использую репозиторий cli/cli для демонстрации:

gh pr list --base trunk -R cli/cli

Выход:

#3045  [hackday] mergeconflict                                                  hackday2102
#3044  Isolate test suite from environment variables                            env-tests
#3042  Remove functionality to add, view and edit binary files in gists         g14a:bug/gist-binary-files
#3023  Issue/pr create: exit with nonzero status code when "Cancel" was chosen  cancel-error-status
#3018  Add `pr create --body-file` flag                                         castaneai:pr-create-body-file
#3010  Add `api --cache` flag                                                   api-cache
#3008  Add interactive select in gist view                                      ganboonhong:interactive-gist-view
#2997  Feature/add files to gist                                                g14a:feature/add-files-to-gist
#2991  Repo create tweaks                                                       repo-create-prompt-change
#2953  Add `repo list` command                                                  cristiand391:add-repo-list
#2923  [WIP] first round of actions support                                     actions
#2728  Better completions                                                       rsteube:better-completions
#2261  pr status: show number of approvals                                      despreston:des/approval-count
#2160  Sign Windows .exes in a post-build hook                                  mbpreble:sign-windows-executables
#2080  store gh config in %APPDATA% on windows os                               RozzaysRed:appdata_configPath
person astrochun    schedule 27.02.2021