2008-11-05 13 views
190

Tengo un repositorio git que rastrea un repositorio svn. Lo cloné usando --stdlayout.git-svn: ¿cómo creo una nueva rama svn a través de git?

he creado una nueva rama local a través de git checkout -b foobar

Ahora quiero esta rama para terminar en …/branches/foobar en el repositorio SVN.

¿Cómo puedo hacer eso?

(cortó un montón de texto de investigación. Ver la historia pregunta si le interesa)

+0

Pregunta relacionada: [¿Cómo hago que git-svn use una rama svn particular como el repositorio remoto?] (Http://stackoverflow.com/questions/192736/how-do-i-make-git-svn-use- a-particular-svn-branch-as-the-remote-repository) – sleske

Respuesta

63

a partir del v1.6.1 git, git svn branch está disponible.

De los documentos git:

 
    branch 
     Create a branch in the SVN repository. 

     -m, --message 
      Allows to specify the commit message. 

     -t, --tag 
      Create a tag by using the tags_subdir instead of the branches_subdir 
      specified during git svn init. 

versiones anteriores de Git no proporcionan una manera de crear una rama SVN.

4

@kch I just (7 de diciembre de 2008) compiló la etiqueta v1.6.1-rc1 de git y contiene el comando git svn branch y la documentación correspondiente. Por lo tanto, la versión v1.6.1 de git debería (con suerte) contener este comando.

+0

de hecho, instalé 1.6.1 ahora y el comando está disponible. actualizado mi respuesta en consecuencia. – kch

269

Sé que esta pregunta ha sido respondida hace un tiempo, pero después de leerla, podría ayudar agregar ejemplos del comando git svn branch específico y relacionarlo con un flujo de trabajo típico.

Como respondió kch, use git svn branch. Aquí está un ejemplo completo, (nótese el -n de funcionamiento en seco para probar):

git svn branch -n -m "Branch for authentication bug" auth_bug 

Si esto sigue así, el servidor responde con la respuesta de esta manera:

copia https://scm-server.com/svn/portal/trunk en r8914 a https://scm-server.com/svn/portal/branches/auth_bug. ..

Y sin el interruptor -n el servidor probablemente añade algo como:

Encontrado posible punto de ramificación: https://scm-server.com/svn/portal/trunk =>https://scm-server.com/portal/branches/auth_bug, 8914

encontrado rama padre: (refs/mandos a distancia/auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Siguiendo padre con do_switch

seguido con éxito los padres r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(refs/mandos a distancia/auth_bug)

La mejor parte de ella, ahora puede crear una rama local basado en su control remoto rama de este modo:

git checkout -b local/auth_bug auth_bug 

que significa "la salida y crear rama local llamado auth_bug y hacer que se seguir la rama remota (último parámetro) auth_bug

prueba de que su rama local trabaja en esa rama remoto mediante dcommit con --dry-run (-n):

git svn dcommit -n 

y SVN servidor debe responder con el nuevo nombre de la sucursal:

Compromiso con https://scm-server.com/svn/portal/branches/auth_bug ...

+0

"git co" no funciona en mi versión. Usé "git checkout" en su lugar. –

+2

Sí, git co significa que Jesper creó un git alias. –

+3

actualizó y reemplazó 'git co' con' git checkout' para que el ejemplo pueda funcionar para cualquiera –

Cuestiones relacionadas