2008-10-10 23 views
60

Una palabra de advertencia: soy un n00b a git en general. Mi equipo usa ramas de características en svn, y me gustaría usar git-svn para rastrear mi trabajo en una rama de característica en particular. He estado (más o menos) siguiendo Andy Delcambre's post para configurar mi repositorio local git, pero esas instrucciones parecen haber llevado git para elegir la rama svn que había cambiado más recientemente como repositorio remoto; el problema es que esa no es la rama que me importa. ¿Cómo controlo qué rama git-svn usa? ¿O me estoy acercando a esto completamente equivocado?¿Cómo hago que git-svn use una rama svn particular como repositorio remoto?

ACTUALIZACIÓN: Hice uso de los -T, -b y -t opciones (en mi caso porque el svn repo tiene varios proyectos, pero quiero que el git cesión temporal para contener sólo el proyecto que estoy trabajando).

Respuesta

60

Muchas gracias al blog de Bart por este práctico reference for svn branches in git. Al parecer, todo lo que necesitaba era para especificar una rama remota al crear la rama git, por ejemplo,

git checkout -b git-topic-branch-foo foo 

donde foo es el nombre de la rama remota.

+8

Si ya ha creado su rama git, también puede usar 'git rebase' para volver a establecer la base en la rama svn. – rampion

+0

http://www.jukie.net/~bart/blog/svn-branches-in-git devuelve el error 500. ¿Se ha movido el blog o algo así? – Henry

+0

Gracias, esta parece ser la única forma de hacer que Git compruebe una sucursal en un estado no separado. –

1

Uso git-svn pero no he usado las funciones que interoperan con las ramas de SVN. Habiendo dicho eso, noto que el tutorial que estabas siguiendo no usó las opciones -T, -b, -t para git svn init. Estas opciones le indican a git-svn los nombres de los directorios troncales/ramas/etiquetas en sentido ascendente, lo que podría ser importante en su situación.

+0

Gracias, Greg. Desafortunadamente para mí, esa es la diferencia entre mi configuración y la del blog. –

30

También puede ver esto: git-svn is a gateway drug - robby on rails.

he usado algo como esto cuando necesitaba para asegurarse de que mi rama local estaba apuntando a la rama SVN remoto correcto:

git branch -r 

para obtener el nombre de la rama remota Quiero ser el seguimiento. Luego

git reset --hard remotes/svn-branch-name 

para cambiar explícitamente mi rama local para que apunte a una rama remota diferente.

+2

+1 para el restablecimiento de git, algo difícil, justo lo que buscaba :) –

+1

este es un proceso manual para forzar a una sucursal local a actualizarse al estado actual de una sucursal de svn remota. la pregunta mientras la leo tiene más que ver con las características de rastreo remoto de git y la configuración de git para rastrear de forma remota una rama específica en SVN. –

9

Necesitaba ejecutar 'git svn fetch' primero, ya que la rama con la que quería asociar se había creado después de mi cliente de git.

+0

gracias, por este consejo, y como nota, si lo encuentras, puedes ver los controles remotos en .git/svn/refs/remotos, y si hay uno nuevo, después de ejecutar 'git svn fetch', debería aparecer allí . –

+0

cuidadoso al mirar en .git, las cosas allí pueden cambiar. En particular, los refs se pueden empaquetar en refs empaquetados a veces, especialmente si no cambian demasiado, y no aparecerán sueltos, incluso si están presentes. git show-ref lo hace mejor, y (tal vez) git branch -r incluso mejor – ComputerDruid

+1

si ejecuta 'get checkout -b git-topic-branch-name remote-branch-name' y obtiene' fatal: git checkout: actualización de rutas es incompatible con el cambio de ramas. Luego ejecute 'git branch -r', y si no ve la rama, es cuando' git svn fetch' es necesario. ('git svn rebase' no extraerá la nueva rama, pero' git svn fetch' lo hará) –

Cuestiones relacionadas