¿Cómo configurar git push para configurar automáticamente el flujo ascendente sin -u?
Quiero git push origin
configurar 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 -u
antes o no, o si he establecido una referencia ascendente. En otras palabras, quiero git push
tener automáticamente el efecto de git push -u
cualquier 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.
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 true
logra lo mismo mientras TAMBIÉN configura el seguimiento ascendente ( docs ).
Opciones de configuración que estamos usando:
--global
establece la opción de configuración en~/.gitconfig
lugar 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 (true
ofalse
) en nuestro caso;push.autoSetupRemote true
La opción que estamos configurandotrue
en 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.
2022: Git 2.37 propone :
git config --global push.autoSetupRemote true
push.autoSetupRemote
Si se establece en "
true
", se asume--set-upstream
la inserción predeterminada cuando no existe seguimiento ascendente para la rama actual;Esta opción surte efecto con
push.default
las 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 "simple
flujos 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'