Seguimiento automático de sucursales remotas con git

Resuelto limp_chimp asked hace 9 años • 3 respuestas

Cuando uso una sucursal local mybranch, me gustaría poder presionar y retirar origin mybranchusando solo git pushy git pull. Tal como están las cosas, tengo que escribir tediosamente git push origin mybranchy git pull origin mybranch. Si intento usar solo git pullpor ejemplo, obtengo:

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> mybranch

Y si entro git branch --set-upstream-to=origin/mybranch mybranch, entonces funciona. Pero esto es casi tan tedioso como los comandos anteriores. ¿Puedo hacer que git haga esto como comportamiento predeterminado? He visto preguntas similares y las respuestas tienden a sugerir que las versiones más nuevas de git hacen esto, pero estoy usando la versión 2.1.3 de git, que es bastante nueva, por lo que no puede ser solo eso.

limp_chimp avatar Apr 03 '15 03:04 limp_chimp
Aceptado

A partir de git 2.37.0, esto ahora es posible con la configuración de git.

Ejecute para actualizar su configuración:

git config --global --add --bool push.autoSetupRemote true

Luego git pushconfigurará automáticamente la sucursal remota.

Nota: La --globalbandera significa que esto se aplicará a todos los comandos de git en su máquina (independientemente de qué repositorio sea), puede omitir la bandera para que sea específica de un único repositorio en su máquina.

Documentación:

https://git-scm.com/docs/git-config#Documentation/git-config.txt-pushautoSetupRemote

push.autoSetupRemote

Si se establece en "verdadero", se asume --set-upstream en la inserción predeterminada cuando no existe seguimiento ascendente para la rama actual; esta opción surte efecto con las opciones push.default simple, ascendente y actual. Es útil si, de forma predeterminada, desea que las nuevas ramas se envíen al control remoto predeterminado (como el comportamiento de push.default=current) y también desea configurar el seguimiento ascendente. Los flujos de trabajo que más probablemente se beneficiarán de esta opción son los flujos de trabajo centrales simples en los que se espera que todas las sucursales tengan el mismo nombre en el control remoto.

Loren avatar Jul 15 '2022 13:07 Loren

Una posible solución es modificar el comportamiento de git push current(tenga en cuenta que esto también tendrá otros efectos secundarios). Puedes hacerlo modificando tu ~/.gitconfigdirectamente (como un archivo y esto supone que estás en Linux) o ejecutando:

git config --global push.default current

Ahora, cuando hagas push, git enviará automáticamente tu rama actual a una rama remota con el mismo nombre , incluso si no lo especificas explícitamente. Además, si su sucursal actual no tiene un equivalente remoto, se creará una sucursal remota y su sucursal actual se configurará para rastrearla (igual que git push -u origin new_branchpero con un solo archivo git push). Eche también un vistazo a esta pregunta donde se describe en detalle el comportamiento de git push.

Ivaylo Strandjev avatar Mar 09 '2017 15:03 Ivaylo Strandjev

No es github, es tu git local, el que hace todo esto.

Si está creando mybranchlocalmente git checkout y ya existe como origin/mybranchen su repositorio local, simplemente puede git checkout mybranchy su git local verá que origin/mybranchexiste y creará localmente mybranchcomo origin/mybranchascendente.

Por otro lado, si origin/mybranchaún no existe y está creando mybranchlocalmente con git checkout -bo similar, realmente no puede configurarlo para que rastree la rama ascendente que aún no existe (puede configurarlo para que rastree esa rama, pero recibe una queja ocasional de que la versión original no está disponible).

En este caso particular, en el primer push (el que creará la rama upstream), puedes usar:

git push -u origin mybranch

lo que le indica a su git local que envíe mybranchy origin , una vez hecho esto, configúrelo origin/mybranchcomo la rama de seguimiento para mybranch.

Tenga en cuenta que esto es lo mismo que ejecutar git branch --set-upstream-to: lo hace una vez , después de lo cual se configura localmente y no tiene que volver a hacerlo. Es más conveniente ya que puedes hacerlo junto con el pushque crea la rama en origin. Pero aun así debes acordarte de hacerlo (una vez; se te recordará cuando corras git pushsin -u origin mybranch).

torek avatar Apr 02 '2015 21:04 torek

git -u origin HEADes una forma de no tener que escribir el nombre completo de su sucursal.

-ues una abreviatura --set-upstreamy HEADse refiere al nombre de su jefe actual (la rama en la que se encuentra actualmente)

triple avatar Jun 05 '2023 14:06 triple