¿Cómo adjunta una nueva solicitud de extracción a un problema existente en github?

409

No estoy seguro, pero tengo un vago recuerdo de crear una solicitud de extracción de github con "Issue 4" o algo en el título, y se adjuntó automáticamente al Issue 4 en el proyecto al que lo estaba enviando. Lo intenté nuevamente recientemente y no funcionó; en su lugar, creó un nuevo problema. No veo ninguna opción como "Adjuntar a problema" en la nueva página de solicitud de extracción, ni "Abrir una nueva solicitud de extracción para este problema" en la página de problema. ¿Hay alguna manera de hacer esto, para ayudar a los propietarios de proyectos a mantener su página de problemas limpia y evitar la duplicación?

Editar : para aclarar, sé que crear una solicitud de extracción siempre crea un nuevo problema. En su lugar, me gustaría adjuntar la solicitud de extracción a un problema existente .

MatrixFrog
fuente
1
Creo que mi respuesta expresa el hecho de que la función que desea ("adjuntar una solicitud de extracción a un problema existente ") podría no estar allí todavía.
VonC
Lo hace (y de hecho lo confirma este tweet ), pero también me hizo darme cuenta de que mi pregunta podría haber sido más clara.
MatrixFrog
Espero que esa característica sea alta en la lista de prioridades de github, ¡porque el código que lleva por ahí me encantaría!
flq
2
La respuesta correcta debería cambiarse por la de masukomi, ahora que el método "arreglos # 1" está disponible. No es necesario pasar por la API.
Edward Anderson
Todavía no puedo encontrar una manera de adjuntar una solicitud de extracción a un problema existente. ¿Me he perdido algo? Las respuestas en este hilo parecen sugerir que esta capacidad existe, pero no puedo encontrarla (siempre hace un nuevo problema).
Kevin Jalbert

Respuestas:

245

El proyecto "hub" puede hacer esto:

https://github.com/defunkt/hub

En el repositorio y la sucursal desde la que desea enviar una solicitud de extracción:

$ hub pull-request -i 4

Esto utiliza la API de GitHub y adjunta una solicitud de extracción para la rama actual al problema número 4 existente.


EDITAR: Comentario de @atomicules: Para ampliar la respuesta de @MichaelMior, un ejemplo completo es:

$ hub pull-request -i 4 -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
Christian Oudard
fuente
12
brew install hubinstalar con homebrew
gcamp
11
Esto no funciona para mi. Dice Error al crear solicitud de extracción: entidad no
procesable
11
@Rubycut tuve el mismo problema. En cambio lo hice hub pull-request URL_TO_ISSUE, luego funcionó para mí. Me pregunto si -i ISSUE_NUMBERsolo funciona si el problema está en el mismo repositorio (es decir, no es un tenedor)
Michael Mior
30
Para ampliar la respuesta de @MichaelMior, un ejemplo completo es:hub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
atomicules
44
Tenga en cuenta que esto solo funciona en los problemas que creó: github.com/defunkt/hub/issues/189#issuecomment-6353354
Zach
237

Agregar una solicitud de extracción a un problema ascendente existente es fácil suponiendo que se bifurcó utilizando los medios normales de github .

Simplemente haga referencia al problema en su mensaje de confirmación utilizando cualquiera de las palabras clave admitidas :

  • cerca
  • cierra
  • cerrado
  • reparar
  • arreglos
  • fijo
  • resolver
  • resuelve
  • resuelto

Por ejemplo: "este commit arregla # 116"

El texto que hace referencia al problema no necesita aparecer en la línea de asunto de su confirmación.

Envíe su confirmación a su repositorio de github y la solicitud de extracción se agregará automáticamente al problema.

Nota: Si bien no es obligatorio, se recomienda encarecidamente que confirme cualquier cosa que sea parte de una solicitud de extracción en una rama separada específica de ese problema, porque las futuras confirmaciones en esa rama se agregarán a la solicitud de extracción (automáticamente por github ) Entonces, si no creó una rama separada, la dejó en el maestro y luego siguió desarrollándose, entonces todos sus compromisos no relacionados con el maestro se agregarán a su solicitud de extracción.

masukomi
fuente
31
"se recomienda encarecidamente que confirme cualquier cosa que sea parte de una solicitud de extracción a una rama separada específica de ese problema, porque las futuras confirmaciones en esa rama se agregarán a la solicitud de extracción", muy buen punto. Eso me sucedió una vez y fue bastante sorprendente.
MatrixFrog
99
Desafortunadamente, esto no resuelve el problema de convertir un problema en una solicitud de extracción. Cualquier discusión que se haya tenido sobre el tema no se transfiere a la solicitud de extracción ... lo cual es lamentable para varios casos de uso. Desearía que Github solo diera un control granular sobre cómo funcionan los pull-reqs en la configuración del repositorio.
Alex Waters
1
@masukomi Una solicitud de extracción es más fácil de resolver para el responsable del proyecto: puede aceptar y fusionar los cambios con solo hacer clic en un botón. Para extraer un cambio en una bifurcación sin utilizar una solicitud de extracción, deberá agregar la bifurcación como control remoto, recuperar sus cambios y fusionarlos usted mismo.
Rory O'Kane
2
Creo que te perdiste mi punto Rory. Si crea una solicitud de extracción y la menciona en el problema (como sugerí), los dos están conectados y aún puede hacer clic en un botón para obtener los cambios.
masukomi
2
Esto no ayuda cuando la solicitud de extracción es algo continuo. Nuestro flujo de trabajo es crear problemas para ideas y luego extraer solicitudes de ramas de características una vez que comencemos a trabajar en esas ideas. Cerrar el problema usando un commit en la solicitud de extracción significa que perdemos la discusión previa que contenía el problema, que a menudo incluye la eliminación de cualquier característica / corrección / refactorización que aborde el problema. Lo que realmente se necesita es una forma directa de convertir un problema en una solicitud de extracción una vez que se ha comenzado a trabajar en el problema.
Daniel Bingham
144

Puede crear una solicitud de extracción a partir de un problema existente con la API de solicitud de extracción :

$ curl --user "smparkes" \
       --request POST \
       --data '{"issue": 15, "head": "smparkes:synchrony", "base": "master"}' \
       https://api.github.com/repos/technoweenie/faraday/pulls

Esto crea una solicitud de extracción:

  • preguntar technoweenieal proyecto faraday(https://api.github.com/repos/ technoweenie / Faraday / tirones)
  • tirar de la synchronyrama en smparkes'tenedor ("cabeza": " smparkes : sincronía ")
  • a la masterrama en technoweeniela bifurcación ("base": " maestro ")
  • y adjunte la solicitud de extracción al problema 15 ("problema": 15 )
  • con el autor de la solicitud de extracción smparkes(--user " smparkes ")
  • se le pedirá su contraseña de GitHub
Rory O'Kane
fuente
1
Copié parte del código de muestra de ese enlace. Espero que no te importe, ¡y avísame si lo traduje mal!
MatrixFrog
3
También necesita autenticación, agregue esto al comando anterior: -u "login: contraseña"
morgoth
2
Solo me gustaría agregar que este método todavía funciona, pero puede tener el efecto secundario de enumerar su confirmación dos veces en la página de discusión, si GitHub ya lo había recogido implícitamente en el número de problema en su mensaje ( ejemplo ). Sin embargo, la confirmación solo se presenta una vez en la solicitud de extracción oficial.
Greg Haskins
3
¿Se puede actualizar a la API v3? GitHub acaba de desactivar la API v2.
Michael Best
1
@rsanchezsaez Como digo en mi respuesta , cambie --user "smparkes:password"para --user "smparkes"que se le solicite su contraseña de forma interactiva.
Rory O'Kane
10

Esta otra respuesta explica cómo usar cURL ( curl) para crear una solicitud de extracción de un problema a través de la API de GitHub . Aquí le mostramos cómo hacerlo utilizando HTTPie ( http), que produce un comando más fácil de leer y editar:

$ 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>

Luego escriba su contraseña de GitHub cuando se le solicite.

Ejemplo explicado

Has iniciado sesión en GitHub con el nombre de usuario smparkes y la contraseña hunter2 . Que viste technoweenie ‘s repo Faraday , pensado en algo que debe ser cambiado, e hizo un tema en el que la cesión temporal por ello, Edición # 15 . Más tarde, descubre que nadie más ha realizado el cambio propuesto y también tiene algo de tiempo para hacerlo usted mismo. Usted bifurca faraday en su propia cuenta , luego escribe sus cambios y los empuja a su bifurcación debajo de una rama llamada sincronía . ¿Crees que Technoweenie debería llevar esos cambios al maestro?rama de su repositorio. Este es el comando que escribiría para convertir su problema anterior en una solicitud de extracción para esta situación:

$ http --auth "smparkes" \
       POST \
       https://api.github.com/repos/technoweenie/faraday/pulls \
       issue=15 head=smparkes:synchrony base=master
http: password for [email protected]: hunter2

Ahora el número 15 es una solicitud de extracción.

Rory O'Kane
fuente
3

en caso de que use 2-factor-auth con github, deberá proporcionar el authtoken como encabezado en la solicitud:

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
Jörn Hees
fuente
1
Sí, 2FA evita que muchas de las respuestas aquí funcionen. En mi caso, creé un token de acceso personal y lo uso en lugar de mi contraseña, lo que funciona.
berto
1

También puede usar Gub para enviar solicitudes de extracción para su problema.

También lo ayuda a usar un estilo apropiado de horquilla / solicitud de extracción.

Editar: 10/10/2013

Para que Gub envíe la solicitud de extracción para el problema # 123, debe ejecutar lo siguiente:

$ gub start 123

Esto creará una nueva sucursal número 123. Una vez que haya terminado de trabajar en el problema, ejecute:

$ gub finish

Voila!

Nota: Soy el autor de Gub gem.

Omar Ali
fuente
1

En lugar de hacerlo en el lado del cliente (con hub, como en la respuesta de Christian Oudard ), ahora (febrero de 2020) puede hacerlo en el lado del servidor (github.com)

Consulte " Ver y vincular problemas y extraer solicitudes de la barra lateral "

Ahora puede vincular problemas y extraer solicitudes a través de la barra lateral en sus respectivas páginas. Las conexiones realizadas aquí cerrarán automáticamente los problemas una vez que se fusione una solicitud de extracción vinculada.

Documentación :https://help.github.com/assets/images/help/pull_requests/link-issue-drop-down.png

Y hay una API de búsqueda con esa característica.

Encuentre todos los problemas abiertos en un repositorio que tenga referencias de solicitudes de extracción de cierre con el linked:prcalificador de búsqueda.
Del mismo modo, ubique todas las solicitudes de extracción en un repositorio al que le falte un problema de soporte -linked:issue.

VonC
fuente
0

Usando la herramienta git-hub , puede hacer esto con:

$> git hub pull attach 123

Esto convertiría el problema # 123 en la solicitud de extracción # 123, manteniendo así toda discusión sobre el problema en una sola ubicación.

Gautama
fuente
0

Si tiene habilitado 2FA, puede usar pasar el token con HTTPie:

http POST \
    https://api.github.com/repos/<repo-owner>/<repo-name>/pulls \
    issue=2 head=issue_2 base=master
    "Authorization:token PUTAUTHTOKENHERE"

Esto usará la rama issue_2para convertir el problema # 2 en una solicitud de extracción.

Kyle Gibson
fuente