¿Clon de GitHub de solicitud de extracción?


128

Me gustaría clonar un repositorio de GitHub. El problema es que no quiero la rama principal; Quiero la versión en esta solicitud de extracción no aprobada .

¿Es posible para mí clonar la versión de solicitud de extracción en lugar del repositorio principal?


Respuestas:


87

Puede clonar la rama que desee utilizando la -bopción y para la solicitud de extracción:

git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name

En su caso, la rama que desea clonar es la rama fuente de la solicitud de extracción ( feature/mongoose-support):

git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support

112

La forma más fácil de hacerlo es así:

git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD

Ahora estará en una nueva sucursal que se encuentra en el estado de la solicitud de extracción.

Es posible que desee configurar un alias ejecutando

git config --global alias.pro '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'

Ahora puede verificar cualquier PR ejecutando git pr <pr_number>, o git pr <pr_number> <remote>si su control remoto github no tiene nombre origin.


49
Mejor: git fetch origin pull/<#>/head:<local_branch_name>( vía )
schlamar

55
Me encontré referencia a esta respuesta tan a menudo, así que me quedé esto en mi .gitconfigarchivo con [alias]: pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f". De esa manera, solo git pr upstream 62escribo y lo siguiente que sé es que estoy en una nueva sucursal de PR # 62 desde arriba. Si siempre lo usa origin, podría codificarlo en lugar de $1, pero eso cambia para mí.
mate ---

@matt que supone que tiene un alias para el pago llamadoco
Michael McQuade

43
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

p.ej:

$ git fetch origin pull/611/head:pull_611
$ git checkout pull_611

Haz cambios, compromételos, PUSH y abre nuevas relaciones públicas desde tu fork en GitHub


¿Cómo puedo fusionar estas sucursales localmente? Acabo de clonar y buscar una solicitud de extracción no fusionada como se indicó anteriormente, e intenté pagar el nombre de la sucursal, pero no aparecen cambios en mi editor de IDE / texto.
erginduran

17

Puede seguir las instrucciones en este resumen para poder revisar el control remoto directamente sin tener que descifrar su repositorio y sucursal.

Ejemplo de uso

Para uno de mis proyectos (github3.py) tengo lo siguiente en mi github3.py/.git/config

[remote "github"]
    fetch = +refs/heads/*:refs/remotes/github/*
    fetch = +refs/pull/*/head:refs/remotes/github/pr/*
    url = git@github.com:sigmavirus24/github3.py

La primera línea es lo que es estándar para cada control remoto con la excepción de que githubse reemplaza por el nombre del control remoto. Lo que esto significa es que las cabezas remotas (o las cabezas de las ramas en ese servidor) se "asignan" a los remotos locales con el prefijo github/. Así que si lo hice git fetch githuby tenía una sucursal en GitHub que no fue notado ya localmente en mi máquina, sería descargar la rama y pude cambiar a ella, así: git checkout -t github/branch_name.

La segunda línea hace lo mismo, pero lo hace para solicitudes de extracción en lugar de ramas git estándar. Por eso lo ves refs/pull/*/head. Obtiene el encabezado de cada solicitud de extracción en GitHub y lo asigna a github/pr/#. Entonces, si alguien envía una solicitud de extracción y está numerada 62 (por ejemplo), haría lo siguiente:

git fetch github
git checkout -t github/pr/62

Y luego estaría en una rama local llamada pr/62(suponiendo que no existiera). Es agradable y significa que no tiene que hacer un seguimiento de los controles remotos o las ramas de otras personas.


2
Por qué no? Explica exactamente cómo hacer esto de una manera conveniente y eficiente.
Ian Stapleton Cordasco

Porque soy un novato, y ese documento es difícil de entender. Nunca habría llegado de "no entenderlo" al git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clonedocumento esencial.
Fresheyeball

66
Lo que hace el documento esencial es agregar un conjunto adicional de información (referencias o referencias) para obtener de GitHub. Cuando lo haces git fetch github, puedes hacerlo git co -t github/pr/#. Esto evita que tenga que copiar y pegar la URL remota, averiguar el nombre de la sucursal, etc. Luego obtendrá nombres de sucursal bien nombrados, concisos y precisos sin la molestia adicional. Pero entiendo que puede parecer abrumador.
Ian Stapleton Cordasco

Oh bien. ¡No sabía esto +1! ¿Me puede dar un ejemplo totalmente calificado?
Fresheyeball

@ sigmavirus24 muchas gracias por la información; Me pregunto si existe un truco similar para Bitbucket.
Petr Kozelka

8
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

¿Cómo puedo obtener una solicitud de extracción no fusionada para una sucursal que no me pertenece?


1
Note git pullcrea una fusión en la rama actual; generalmente para un RP que desea git fetchobtener solo el código original del autor (luego se puede acceder como FETCH_HEAD). Si desea una fusión, también vale la pena mencionar pull/2/merge(en lugar de pull/2/head): esto hace que GitHub le brinde la confirmación de fusión exacta que sucedería si hace clic en el botón [Fusionar] ahora.
Beni Cherniavsky-Paskin

6

Cuando un usuario envía una solicitud de extracción, está pidiendo que se fusionen algunos cambios de una rama en su clon de una bifurcación al repositorio de otro usuario.

Los cambios que desea se pueden obtener del origen de la solicitud de extracción. Para hacer esto, clone el repositorio del usuario ( git://github.com/berstend/frappe.git) y luego revise la rama desde la que creó la solicitud de extracción ( feature/mongoose-support).


1

Después de instalar git-extras

(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)

Simplemente puedes usar git pr

$ git pr 62 [remote]


0

Esa solicitud de extracción muestra las confirmaciones del tenedor de esa persona para que pueda ver que está presionando sus cambios desde la feature/mongoose-supportrama.

Puedes clonar su repositorio y pagar esa rama


0

Para mí fue tan simple como

git fetch origin pull/4/head

Donde 4fue encontrado aquí:

ingrese la descripción de la imagen aquí

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.