2011-01-03 6 views
8

Trabajé en mi rama local de funciones, foo. Luego quise llevar esa nueva rama al origen para que otros pudieran trabajar en ella. La forma normal de hacer esto es:¿Cuál es el resultado de `git push origin`?

git push origin foo:foo 

Lo que eventualmente hice, y funcionó completamente como se esperaba, empujando hacia arriba 61 objetos. Antes de hacerlo, en un capricho, he intentado:

git push origin 

Pensando que tal vez sería por defecto a hacer una nueva rama a distancia basado en el nombre de mi sucursal local. La salida fue salida de inserción normal, con solo 13 objetos empujados hacia arriba. Los resultados fueron imperceptibles. Nada nuevo apareció para los otros desarrolladores o en mi repositorio local después de una recuperación.

Entonces, ¿qué cree git que le digo que haga cuando lo hago git push origin, y qué efecto, si alguno, tuvo en mi repositorio remoto?

+3

'git push' ayuda debe darle toda la información que desea saber. Hay una sección sobre qué hace 'origen de git push' y qué opciones de configuración afectan lo que hace. http://www.kernel.org/pub/software/scm/git/docs/git-push.html –

Respuesta

11

Depende de su versión de git. En la versión anterior, intentaría empujar a cada una de las sucursales locales que también están presentes en el lado distante. Desde la versión 1.6.3, el comportamiento se controla mediante la opción de configuración push.default.

Los valores son:

  • matching: [el valor por defecto] empujar toda rama con mismo nombre local y distante
  • nothing: empujar nada
  • tracking: habrá solamente empujar la rama actual si está rastreando una rama distante
  • current: empujará la rama actual
+2

Y voy a agregar a eso: 'matching' es la configuración predeterminada predeterminada –

+0

Se actualizó la respuesta con eso para facilitar la lectura para otros –

3

Junio ​​2012: [ANNOUNCE] Git 1.7.11.rc1

Un nuevo modo para push, "simple", que es un cruce entre "current" y "upstream", se ha introducido.
"git push" sin ningún refspec empujará la rama actual al mismo nombre en el repositorio remoto solo cuando esté configurada para rastrear la rama con el mismo nombre allí.
El plan es hacer de este modo el nuevo valor predeterminado cuando push.default no está configurado.


marzo de 2012: cuidado: que por defecto "juego" política podría cambiar pronto
(en algún momento después Git1.7.10 +)
:

Ver "Please discuss: what "git push" should do when you do not say what to push?"

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

La propuesta es cambiar el valor predeterminado a 'upstream', es decir, empujar solamente la rama actual, y lo empuja al git pull rama sería tirar de.
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 tema:

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

discusiones pertinentes anteriores incluyen:

unirse a la discusión, enviar sus mensajes a: [email protected]

Cuestiones relacionadas