tipos tag remove qué practices existen etiquetas crear best git github pull-request

tag - qué tipos de etiquetas existen en git



¿Cómo puedo filtrar todas las solicitudes de extracción de GitHub para una rama objetivo específica? (2)

Estoy trabajando en un repositorio de GitHub con muchas sucursales y solicitudes de extracción.

Digamos, por ejemplo, que tengo las siguientes solicitudes de extracción:

  • a a rama X
  • b a rama X
  • c a rama Y
  • d a rama X
  • e para ramificar Y .

¿Hay alguna forma de encontrar todas las solicitudes de extracción dirigidas a la rama X (es decir, a -> X , b -> X , d -> X )?


A partir del 2016-01-10, esto se ha agregado a la barra de api de búsqueda gh, vea la siguiente respuesta.

Se aceptó el original (y ahora se publicó la respuesta) sin editar.

Actualmente no está disponible a través de la interfaz web

GitHub actualmente no proporciona una forma de filtrar solicitudes de extracción por su sucursal de destino a través de su interfaz web. En su lugar, todo lo que obtiene actualmente es solo la lista completa de solicitudes de extracción con los nombres de las ramas del tema:

Al hacer clic en una solicitud de extracción se mostrará la rama de destino, pero eso no ayuda realmente a realizar ninguno de los filtros que desea hacer.

Puedes usar la API REST de GitHub en su lugar

Sin embargo, es posible filtrar solicitudes de extracción utilizando la API REST de GitHub :

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

Eso debería mostrarle todas las solicitudes de extracción abiertas para el repositorio :owner/:repo , filtradas por las solicitudes que apuntan a :branch como su rama base. De la documentación:

Filtros tirados por nombre de rama base. Ejemplo: gh-pages .

Ejemplo usando cURL

Si tiene el curl disponible, puede probarlo en un repositorio público desde la línea de comandos:

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

Eso devolverá una respuesta JSON de la siguiente forma:

[ { "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" } } } ]

Cada objeto en la matriz es una solicitud de extracción, filtrada por la rama base / destino. El JSON en realidad contiene mucha más información que esta, solo he eliminado la mayor parte para mostrar las partes relevantes para esta pregunta.

Analizando la respuesta cURL

Probablemente podría escribir un script Python / Ruby / PHP / Whatever para luego analizar la propiedad html_url de cada solicitud de extracción y listarla en la línea de comandos. Por ejemplo, aquí hay un simple script de Ruby que analizará la salida de una respuesta JSON guardada de la salida de 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

Lo que da como resultado lo siguiente:

$ 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


Si, puedes hacerlo.

En la terminología de Github, la "bifurcación" es "base". Por lo tanto, la frase de búsqueda es: is:open is:pr base:X

Descripción oficial: Búsqueda basada en nombres de sucursales.

Opcionalmente, puede agregar is:merged o is:unmerged filtros sin is:merged también.