¿Puede emitir solicitudes de extracción desde la línea de comandos en GitHub?


298

Parece que tiene que interactuar con github.com para iniciar una solicitud de extracción. ¿Es esto así?


2
No veo nada en su API para hacer solicitudes de extracción: desarrollo.github.com
Adam Vandenberg


1
¿En qué sistema operativo tiene intención de hacer esto?
IgorGanapolsky

¿Cómo hacer esto en Windows 8 o 10?
Mathivanan KP

Creé un script bash para esto, si alguien está interesado.
mvr

Respuestas:


114

ACTUALIZACIÓN : el comando hub ahora es un proyecto oficial de github y también admite la creación de solicitudes de extracción

ORIGINAL :

Parece algo particularmente útil para agregar al comando hub: http://github.com/defunkt/hub o la gema github: http://github.com/defunkt/github-gem

Sugiero presentar un problema con los proyectos que lo soliciten. Los chicos de Github son bastante receptivos.


8
El github-joya incluye una facilidad para crear solicitudes de atracción para las edades: gh pull-request [user] [branch].
Holger Just

66
¿Funciona sin que Github haya bifurcado el repositorio primero, es decir, desde un clon directo del repositorio fuente?
Hari Karam Singh

1
@Holger Just y cualquier otra persona: eso solo crea el texto de una solicitud de extracción y no omite la necesidad de una bifurcación en Github. Todavía no he encontrado una forma de evitarlo. Tengo la intención de probar la utilidad 'pullr' publicada a continuación pronto. Consulte aquí el problema de las personas que solicitan soporte completo de solicitud de extracción de github-gem.
mateor

1
para comando rápido usando hub:hub pull-request -m "message pull request" -b master -h your_branch
Gujarat Santana

No sé por qué no se menciona en los documentos anteriores, pero para fusionar la solicitud de extracción rápida, consulte su sucursal maestrahub merge https://github.com/repo/pull/1
holmberd

53

Git ahora se envía con un subcomando 'git request-pull' [-p] <start> <url> [<end>]

Puedes ver los documentos aquí

Puede resultarle útil, pero no es exactamente lo mismo que la función de GitHub .


77
@NathanBasanese Genera texto legible para humanos que describe la solicitud de extracción. Los documentos de git y el libro de GitHub dicen enviar esto por correo electrónico al responsable del proyecto, alguien con privilegios de escritura en el repositorio compartido (posiblemente github). El mantenedor revisa el texto de solicitud de extracción que envió (en lugar de utilizar el proceso de solicitud de extracción en línea de github). Pueden hacer una git pullde las URL y ramas indicadas en su solicitud de extracción para fusionar sus cambios en su clon local y llevar estos cambios a github.
placas

30

Con el contenedor de línea de comandos de Hub puedes vincularlo a git y luego puedes hacer git pull-request

Desde la página del manual de hub:

   git pull-request [-f] [TITLE|-i ISSUE|ISSUE-URL] [-b BASE] [-h HEAD]
          Opens a pull request on GitHub for the project that the "origin" remote points to. The default head of the pull request is the current branch. Both base and head of the pull request can be explicitly given in one  of  the  following  formats:  "branch",  "owner:branch",
          "owner/repo:branch". This command will abort operation if it detects that the current topic branch has local commits that are not yet pushed to its upstream branch on the remote. To skip this check, use -f.

          If TITLE is omitted, a text editor will open in which title and body of the pull request can be entered in the same manner as git commit message.

          If instead of normal TITLE an issue number is given with -i, the pull request will be attached to an existing GitHub issue. Alternatively, instead of title you can paste a full URL to an issue on GitHub.

2
No sabía sobre Hub, está disponible a través de homebrew: brew install hubesta parece ser la respuesta correcta para los usuarios de mac.
wfbarksdale

1
//, ¿Hay algún sitio en línea al que pueda dirigir a las personas para obtener más información sobre Hub?
Nathan Basanese

19

Un hombre busca como ...

man git | grep pull | grep request

da

git request-pull <start> <url> [<end>]

Pero, a pesar del nombre, no es lo que quieres. Según los documentos:

Genere una solicitud pidiéndole a su proyecto ascendente que extraiga los cambios en su árbol. La solicitud, impresa en la salida estándar, comienza con la descripción de la rama, resume los cambios e indica desde dónde se pueden extraer.

@HolgerJust mencionó la gema github que hace lo que quieres:

sudo gem install gh 
gh pull-request [user] [branch]

Otros han mencionado el hubpaquete oficial de github:

sudo apt-get install hub

o

brew install hub 

luego

hub pull-request [-focp] [-b <BASE>] [-h <HEAD>]

3
Esto genera un resumen de los cambios pendientes, no tiene nada que ver con una solicitud de extracción que se emite a través de Github
Flov

1
@Flov Por "Esto", supongo que te refieres a la git request-pulllínea. Sí, eso tiene sentido, pero me sorprende que git no tenga un comando para enviar solicitudes de extracción por correo electrónico como lo hace github. Después de todo, el git config user.emailestá disponible para ello. Especialmente con un comando llamado pull-request.
placas el

2
Para Ubuntu, parece que github-cliya no está disponible después de Precise ... He abierto una pregunta para pedir una alternativa.
IsaacS

7

Terminé haciendo la mía , descubrí que funciona mejor con las otras soluciones que existían.

https://npmjs.org/package/pullr


66
Intenté hacer pullr -n dentro del repositorio clonado. Me dio un error al abrir ... / clonedRepo / undefined / .pullr-token-cache en Windows 7. ¿Es posible que desee tener más documentación, como un ejemplo de uso?
BT

5

Creé una herramienta recientemente que hace exactamente lo que quieres:

https://github.com/jd/git-pull-request

Automatiza todo en un solo comando, bifurca el repositorio, empuja el PR, etc. ¡También admite actualizar el PR si necesita editarlo / arreglarlo!


5

Estoy usando un alias simple para crear una solicitud de extracción,

alias pr='open -n -a "Google Chrome" --args "https://github.com/user/repo/compare/pre-master...nawarkhede:$(git_current_branch)\?expand\=1"'

2

Además de github/hub, que actúa como un proxy para Git , ahora (febrero de 2020) tiene cli/cli:

Consulte " Supercargue su experiencia de línea de comandos: la CLI de GitHub ahora está en beta "

Crear una solicitud de extracción

Cree una rama, realice varias confirmaciones para corregir el error descrito en el problema y use gh para crear una solicitud de extracción para compartir su contribución.

Creación de cli / cli pr - https://i1.wp.com/user-images.githubusercontent.com/10404068/74261506-35df4080-4cb0-11ea-9285-c41583009e6c.png?ssl=1

Al usar la CLI de GitHub para crear solicitudes de extracción, también crea automáticamente una bifurcación cuando aún no tiene una, y empuja su rama y crea su solicitud de extracción para fusionar su cambio.


Y en abril de 2020: "La CLI de GitHub ahora admite solicitudes de extracción de llenado automático y configuración personalizada "

GitHub CLI 0.7 está disponible con varias de las mejoras más solicitadas de los comentarios que han proporcionado nuestros usuarios beta.
Desde la última versión menor, 0.6, hay tres características principales:

  • Configure ghpara usar su editor preferido congh config set editor [editor] .
  • Configure ghpor defecto a SSH con gh config set git_protocol ssh.
    El protocolo predeterminado de Git es HTTPS.
  • Rellene automáticamente el título y el cuerpo de una solicitud de extracción de sus confirmaciones con gh pr create --fill.

Entonces:

gh pr create --fill

1

He usado esta herramienta antes, aunque parece que primero debe haber un problema abierto, es muy útil y realmente optimiza el flujo de trabajo si usa el seguimiento de problemas de github. git open-pull y luego se envía una solicitud de extracción desde cualquier rama en la que se encuentre o seleccione. https://github.com/jehiah/git-open-pull

EDITAR: Parece que puede crear problemas sobre la marcha, por lo que esta herramienta es una buena solución.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.