2011-04-06 21 views
280

Tengo dos versiones diferentes de git. En la versión 1.6.2, git push no tiene la opción -u. Solo aparece en la versión 1.7.x.¿Qué significa git push -u?

A partir de los documentos, la -u está relacionada con la variable

branch.<name>.merge 

en git config. Esta variable se describe a continuación:

Defines, together with branch.<name>.remote, the upstream branch 
for the given branch. It tells git fetch/git pull which branch to merge. 

¿Qué es una rama ascendente?

+1

Véase también http://stackoverflow.com/questions/2739376/definition-of-downstream-and-upstream/2749166#2749166 – VonC

Respuesta

299

"Upstream" se referiría al repositorio principal del que otras personas extraerán, p. Ej. su repositorio GitHub. La opción -u establece automáticamente ese flujo ascendente para usted, vinculando su repositorio a uno central. De esta forma, en el futuro, Git "sabe" hacia dónde desea ingresar y de dónde desea tirar, para que pueda usar git pull o git push sin argumentos. Un poco abajo, this article explica y demuestra este concepto.

+18

veo que el artículo que ha enlazado a no señalar esto, pero ya que es algo así como un truco, creo que vale la pena señalar que la rama a la que se presiona con 'git push' [no se ve afectada por la configuración de la rama ascendente] (http://longair.net/blog/2011/02/27/an-asymmetry-between-git-pull-and-git-push /) a menos que tenga 'push.default' establecido en' tracking' (o 'upstream' en versiones posteriores de git). –

+0

no entiendo por qué eclipse egit ofrece ambos entonces? – HaveAGuess

+14

@HaveAGuess Probablemente por la misma razón que Eclipse también ofrece miseria y desesperación. – twiz

6

¡Esto ya no está actualizado!

Push.default is unset; its implicit value has changed in 
Git 2.0 from 'matching' to 'simple'. To squelch this message 
and maintain the traditional behavior, use: 

    git config --global push.default matching 

To squelch this message and adopt the new behavior now, use: 

    git config --global push.default simple 

When push.default is set to 'matching', git will push local branches 
to the remote branches that already exist with the same name. 

Since Git 2.0, Git defaults to the more conservative 'simple' 
behavior, which only pushes the current branch to the corresponding 
remote branch that 'git pull' uses to update the current branch. 
+1

Pero, ¿qué significa bandera '-u' por ahora? Aún así, GitHub recomienda utilizar este indicador cuando creamos un nuevo repositorio ... –

+3

@JeanPaul - La opción -u hace lo siguiente: por cada rama que esté actualizada o presionada con éxito, agregue una referencia ascendente (de seguimiento), utilizado por argumento-menos git-pull y otros comandos. Entonces, después de presionar su sucursal local con la opción -u, esta sucursal local se vinculará automáticamente con la sucursal remota, y puede usar git pull sin ningún argumento. –