software - Comportamiento predeterminado de "git push" sin una rama especificada




software git (8)

(Marzo de 2012)
Cuidado: la política de " matching " predeterminada puede cambiar pronto
(A veces después de git1.7.10 +) :

Consulte " Discutir: ¿qué debe hacer" git push "cuando no dice qué presionar? "

En la configuración actual (es decir, push.default=matching ), git push sin argumento empujará todas las ramas que existen localmente y remotamente con el mismo nombre .
Esto suele ser apropiado cuando un desarrollador empuja a su propio repositorio público, pero puede ser confuso, si no peligroso, al usar un repositorio compartido.

La propuesta es cambiar el valor predeterminado a ' upstream ' , es decir, empujar solo la rama actual, y empujarla a la rama de la que tiraría.
Otro candidato es ' current '; esto empuja solo la rama actual a la rama remota del mismo nombre.

Lo que se ha discutido hasta ahora se puede ver en este hilo:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Las discusiones relevantes anteriores incluyen:

Para unirse a la discusión, envíe sus mensajes a: [email protected]

Utilizo el siguiente comando para enviar a mi rama remota:

git push origin sandbox

Si yo digo

git push origin

¿eso empuja cambios en mis otras sucursales también, o solo actualiza mi rama actual? Tengo tres ramas: master , production y sandbox .

La documentación de git push no es muy clara al respecto, por lo que me gustaría aclarar esto para siempre.

¿Qué ramas y controles remotos hacen los siguientes comandos de git push actualizan exactamente?

git push 
git push origin

origin arriba es un control remoto.

Entiendo que git push [remote] [branch] solo enviará esa rama al control remoto.


Acabo de ingresar mi código a una rama y lo empujé a github, así:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments

Aquí hay una información muy útil y útil sobre Git Push : Git Push: solo la punta

El uso más común de git push es enviar los cambios locales a su repositorio público anterior. Suponiendo que el upstream es un remoto llamado "origen" (el nombre remoto predeterminado si su repositorio es un clon) y la rama que se actualizará a / desde se llamará "master" (el nombre de la rama predeterminada), esto se hace con: git push origin master

git push origin empujará los cambios de todas las ramas locales a las ramas coincidentes con el origen remoto.

git push origin master empujará los cambios desde la rama maestra local a la rama maestra remota.

git push origin master:staging impulsará los cambios de la rama maestra local a la rama de la puesta en marcha remota si existe.


En lugar de usar alias, prefiero crear scripts git-XXX para poder controlarlos con más facilidad (todos nuestros desarrolladores tienen un determinado directorio controlado por fuente en su camino para este tipo de cosas).

Este script (llamado git-setpush ) establecerá el valor de configuración para el valor de remote.origin.push en algo que solo empujará la rama actual:

#!/bin/bash -eu

CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH

echo "setting remote.origin.push to $NEW_PUSH_REF"
git config remote.origin.push $NEW_PUSH_REF

nota, ya que estamos usando Gerrit , establece el objetivo en refs/for/XXX para ingresar a una rama de revisión. También asume que el origen es su nombre remoto.

Invocarlo después de revisar una rama con

git checkout your-branch
git setpush

Obviamente, podría adaptarse para hacer el pago, pero me gustan los scripts para hacer una cosa y hacerlo bien


Puede cambiar ese comportamiento predeterminado en su .gitconfig , por ejemplo:

[push]
  default = current

Para verificar la configuración actual, ejecute:

git config --global --get push.default

Puede configurar el comportamiento predeterminado para su git con push.default

git config push.default current

o si tienes muchos repositorios y quieres lo mismo para todos entonces

git config --global push.default current

La corriente en esta configuración significa que, de forma predeterminada, solo empujará la rama actual cuando haga git push

Otras opciones son:

  • nada: no empujar nada
  • coincidencia: empujar todas las ramas coincidentes (predeterminado)
  • seguimiento: empuje la rama actual a lo que sea seguimiento
  • actual: empuje la rama actual

ACTUALIZACIÓN - NUEVA FORMA DE HACER ESTO

A partir de Git 1.7.11 haga lo siguiente:

git config --global push.default simple

Esta es una nueva configuración introducida que funciona de la misma manera que la actual, y se hará predeterminada a git desde v 2.0 según los rumores.


Puede empujar rama actual con comando

git push origin HEAD

(tomado de here )


Un git push intentará enviar todas las sucursales locales al servidor remoto, esto es probablemente lo que no desea. Tengo un par de conveniencias configuradas para lidiar con esto:

Alias ​​"gpull" y "gpush" apropiadamente:

En mi ~ / .bash_profile

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'

Por lo tanto, ejecutar "gpush" o "gpull" empujará solo mi rama "actualmente en".







git-push