2010-11-08 21 views
5

Si hagogit tracking no funciona con diferentes nombres locales y remotos?

git checkout -b samename origin/samename 

luego un seguimiento parece funcionar bien. Si realizo confirmaciones posteriores, puedo hacer

git push 

y git realizo mis confirmaciones de origen correctamente.

Sin embargo, si lo hago

git checkout -b diffname origin/samename 

luego un seguimiento no funciona, a pesar de esta sección del libro git Pro:

$ git checkout -b sf origin/serverfix 
Branch sf set up to track remote branch refs/remotes/origin/serverfix. 
Switched to a new branch "sf" 
Now, your local branch sf will automatically push to and pull from origin/serverfix 

Git entusiasmo simplemente da 'Todo hasta la fecha' ¿Lo que da?

Me postulo Git 1.7.1 en Mac OS X

Aquí está todo el experimento para aquellos que quieran probarlo en casa:

szbwood-mbp15:proj4_local bwood$ vi file1 
szbwood-mbp15:proj4_local bwood$ git add file1 
szbwood-mbp15:proj4_local bwood$ git commit -m"Created file 1" 
[master (root-commit) 5d50289] Created file 1 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 file1 
szbwood-mbp15:proj4_local bwood$ git push origin master:samename 
Counting objects: 3, done. 
Writing objects: 100% (3/3), 225 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
To /Users/bwood/work/gitplay/proj4_remote.git 
* [new branch]  master -> samename 
szbwood-mbp15:proj4_local bwood$ git checkout -b samename origin/samename 
Branch samename set up to track remote branch samename from origin. 
Switched to a new branch 'samename' 
szbwood-mbp15:proj4_local bwood$ vi file1 
szbwood-mbp15:proj4_local bwood$ git commit -a 
[samename a7af908] .. 
1 files changed, 1 insertions(+), 0 deletions(-) 
szbwood-mbp15:proj4_local bwood$ git push 
Counting objects: 5, done. 
Writing objects: 100% (3/3), 251 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
To /Users/bwood/work/gitplay/proj4_remote.git 
    5d50289..a7af908 samename -> samename 
szbwood-mbp15:proj4_local bwood$ git checkout -b diffname origin/samename 
Branch diffname set up to track remote branch samename from origin. 
Switched to a new branch 'diffname' 
szbwood-mbp15:proj4_local bwood$ vi file1 
szbwood-mbp15:proj4_local bwood$ git commit -a 
[diffname c5bbec1] .. 
1 files changed, 1 insertions(+), 0 deletions(-) 
szbwood-mbp15:proj4_local bwood$ git push 
Everything up-to-date 

Lo extraño es, el archivo de configuración se ve bien ..

[branch "samename"] 
     remote = origin 
     merge = refs/heads/samename 
[branch "diffname"] 
     remote = origin 
     merge = refs/heads/samename 
+0

Lo extraño es que el archivo de configuración en .git se ve bien: – bruce

+0

En realidad, creo que el libro está mal, y leyendo la página de manual para push y este mensaje SO http://stackoverflow.com/questions/948354/git -push-current-branch agrega peso a esto.Parece que si no especificas abiertamente la rama para enviar, git empuja TODAS las ramas locales que coinciden con los nombres remotos. Y si no especifica el control remoto, entonces asume el control remoto de la rama actual. Por lo tanto, a menudo debe parecerle a las personas que rastrear una rama significa que puede impulsar sus cambios con 'git push', pero creo que esto está equivocado. Git push está impulsando todas las sucursales locales que coinciden con nombres remotos. – bruce

Respuesta

4

Esto no se trata de rastrear. git push de forma predeterminada no utiliza el seguimiento en absoluto. Empuja las ramas con los nombres correspondientes al control remoto especificado. Hay un parámetro de configuración para controlar este comportamiento:

push.default

Define el empuje acción git debe tomar si no se da refspec en la línea de comandos, sin refspec se configura en el mando a distancia, y sin refspec está implícito en cualquiera de las opciones dadas en la línea de comando. Los valores posibles son:

  • nada - no empuje nada.
  • correspondiente - presione todas las ramas correspondientes. Todas las ramas que tienen el mismo nombre en ambos extremos se consideran coincidentes. Este es el predeterminado.
  • seguimiento - empuje la rama actual a su rama ascendente.
  • actual: inserte la rama actual en una rama con el mismo nombre.

Una vez más, el valor predeterminado es coincidente, por lo que aunque usted no tiene seguimiento establecido en el primer caso, se trata sólo de los nombres que coinciden con lo que le dicen que empujar. Si lo desea, puede establecer push.default en tracking y obtener el comportamiento que espera.

En cuanto a su cita de Pro Git ... wow, Pro Git es generalmente un gran recurso. No lo he leído hasta el final (tiendo a ir directo a las páginas de manual y al código fuente), pero todo lo que he leído es excelente; ¡Estoy sorprendido de ver incluso un pequeño error!

+0

Gracias Jefromi: gran explicación. Gracias también por su ayuda en las preguntas previas de git que tuve, siempre claras y útiles :-) – bruce

Cuestiones relacionadas