¿Cómo configurar git push para configurar automáticamente el flujo ascendente sin -u?

Resuelto John asked hace 11 años • 13 respuestas

Quiero git push originconfigurar automáticamente la referencia ascendente cuando envío una rama creada localmente por primera vez.

Lo sé git push -u, pero no quiero tener que pensar si lo he usado -uantes o no, o si he establecido una referencia ascendente. En otras palabras, quiero git pushtener automáticamente el efecto de git push -ucualquier impulso de una rama que aún no tenga un flujo ascendente.

es posible? Si requiere un alias o un script de utilidad, está bien.

John avatar Jul 25 '13 07:07 John
Aceptado

Puede configurarlo con git config --global push.default current( docs ) para que impulse la rama actual para actualizar una rama con el mismo nombre.

Actualización 2022 (git>=2.37.0)

git config --global --add --bool push.autoSetupRemote truelogra lo mismo mientras TAMBIÉN configura el seguimiento ascendente ( docs ).

Opciones de configuración que estamos usando:

  • --globalestablece la opción de configuración en ~/.gitconfiglugar de en nuestro repositorio directamente, y se aplicará a todos los demás repositorios, a menos que hayamos sobrescrito en nuestro repositorio;
  • --add- agrega una nueva línea a la opción sin alterar ningún valor existente;
  • --bool- opciones históricas para seleccionar un especificador de tipo, que es bool ( trueo false) en nuestro caso;
  • push.autoSetupRemote trueLa opción que estamos configurando trueen este comando habilita una función en la que enviar una nueva rama a un repositorio remoto configura automáticamente esa rama para rastrear la rama remota con el mismo nombre.
Andrea Bergonzo avatar Nov 15 '2018 15:11 Andrea Bergonzo

2022: Git 2.37 propone :

git config --global push.autoSetupRemote true

push.autoSetupRemote

Si se establece en " true", se asume --set-upstreamla inserción predeterminada cuando no existe seguimiento ascendente para la rama actual;

Esta opción surte efecto con push.defaultlas opciones ' simple', ' upstream' y ' current'.

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 " simpleflujos de trabajo centrales donde se espera que todas las sucursales tengan el mismo nombre en el control remoto.


2013: Nota: el hecho de que la nueva política de inserción predeterminada " simple" dependa de que una rama tenga una ascendente significa que:
establecer una rama ascendente se considera un paso voluntario, no uno automatizado oculto

Cuando " git push [$there]" no dice qué enviar, hemos utilizado la semántica tradicional de "coincidencia" hasta ahora (todas sus ramas se enviaron al control remoto siempre que ya haya ramas con el mismo nombre allí).

Usaremos la " simple" semántica que empuja la rama actual a la rama con el mismo nombre, solo cuando la rama actual esté configurada para integrarse con esa rama remota .
Hay una variable de configuración de preferencias del usuario " push.default" para cambiar esto.


Entonces, a partir de la respuesta de Mechanicalfish , puede definir un alias, con las comillas dobles correctas ( ) escapadas ( ):"\"

git config alias.pu "![[ $(git config \"branch.$(git rev-parse --abbrev-ref HEAD).merge\") = '' ]] && git push -u || git push"

git pu origin

Sc0ttyD propone en los comentarios el siguiente alias:

alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'

En varias líneas:

alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && 
           git push -u origin $(git symbolic-ref --short HEAD) || 
           git push'
VonC avatar Sep 26 '2013 07:09 VonC