repositorio que guardar credenciales crear configurar git github pull-request

que - ¿Cuál es la configuración de git correcta para trabajar con las solicitudes de extracción de GitHub?



guardar credenciales git (4)

Soy consciente de ¿Cómo puedo revisar una solicitud de extracción de GitHub?

Al agregar fetch = +refs/pull/*/head:refs/remotes/origin/pr/* a .git/config permite la extracción y el proceso de salida, las acciones de extracción fallan:

[remote "origin"] url = https://github.com/the/repo.git fetch = +refs/heads/*:refs/remotes/origin/* fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

Fetch y checkout funciona bien:

$ git fetch origin

... todo bien

$ git checkout -b "pr-123" origin/pr/123 Branch pr-123 set up to track remote branch pr/123 from origin. Switched to a new branch ''pr-123''

... éxito, consiguió el código!

Pero la tracción falla:

$ git pull Your configuration specifies to merge with the ref ''refs/heads/pr/123'' from the remote, but no such ref was fetched.

... ha fallado.

Puedo especificar la referencia manualmente:

$ git pull origin refs/pull/123/head

y esto funciona Pero, ¿cómo puedo configurar el archivo de configuración para que:

  1. Fetch & Checkout todavía funciona, y
  2. ¿Las siguientes acciones de extracción funcionan sin especificar manualmente la referencia remota?

He encontrado que si edito el archivo de configuración y cambio:

[branch "pr-123"] remote = origin merge = refs/heads/pr/123

a:

[branch "pr-123"] remote = origin merge = refs/pull/123/head # <-- here is the change

... entonces git pull funciona bien. ¿Cómo se puede lograr esto sin editar manualmente el archivo de configuración para cada solicitud de extracción?


A partir de las especificaciones de búsqueda no es posible encontrar de forma inequívoca que las referencias remotas refs/remotes/origin/pr/123 rastrean el origin:refs/pull/123/head porque también es posible el origin:refs/heads/pr/123 . Para ayudarlo, podrías usar un nombre remoto diferente, por ejemplo:

[remote "origin-pr"] url = <same as for origin> fetch = +refs/pull/*/head:refs/remotes/origin-pr/pr/*

Luego, git checkout con el nombre explícito de la sucursal (que debería estar disponible en las GUI) podría crear una referencia de seguimiento correcta:

$ git checkout -b pr/123 origin-pr/pr/123 [branch "pr/123"] remote = origin-pr merge = refs/pull/123/head

Sin embargo, parece que no es posible hacer funcionar un simple git checkout br/123 :

$ git checkout pr/123 error: pathspec ''pr/123'' did not match any file(s) known to git.


Creo que encontré una solución, y es increíblemente simple: ¡el orden de las líneas con fetch = +refs... importa!

Cambié:

[remote "origin"] url = https://github.com/the/repo.git fetch = +refs/heads/*:refs/remotes/origin/* fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

a:

[remote "origin"] url = https://github.com/the/repo.git fetch = +refs/pull/*/head:refs/remotes/origin/pr/* fetch = +refs/heads/*:refs/remotes/origin/*

(últimas dos líneas intercambiadas)

Ahora todo funciona ( fetch , checkout , pull ).

Todavía estoy esperando ver algunos (des) problemas esperados con esta configuración, pero hasta ahora todo bien ...


Solo has conseguido ramas, no solicitudes de extracción. Agregue esto a su configuración:

fetch = +refs/pull/*/head:refs/pulls/origin/pr/*

Después de eso, puede verificar una rama que apunta a una referencia de PR remota:

git checkout -b "pr-123" pulls/origin/pr/123

En general, puede consultar una referencia si la ha buscado desde el control remoto, así que mire a través de la salida del comando git fetch y busque el nombre de referencia de la RP. Eso es lo que debes poner en el comando de checkout . Deberías ver algo como:

[new ref] refs/pull/123/head -> refs/pulls/origin/pr/123

Tenga en cuenta que puede sustituir la parte de pulls por cualquier prefijo personalizado. Ahora puede crear una rama y señalarla a pulls/origin/pr/123 , que es equivalente a refs/pulls/origin/pr/123 (ver git refspec doc ).


Una forma correcta es con hub ! :)

$ brew install hub $ hub checkout https://github.com/github/hub/pull/123 ... $ hub pull Already up-to-date.

Tiene utilidades adicionales para trabajar con solicitudes de extracción de Github, como

hub pull-request