git-svn: ¿cómo creo una nueva rama svn a través de git?


193

Tengo un repositorio git que rastrea un repositorio svn. Lo cloné usando --stdlayout.

Creé una nueva sucursal local a través de git checkout -b foobar

Ahora quiero que esta rama termine …/branches/foobaren el repositorio svn.

¿Cómo hago para eso?

(recortó mucho texto de investigación. vea el historial de preguntas si le importa)


Respuestas:


280

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

Como kch respondió, usa git svn branch. Aquí hay un ejemplo completo, (tenga en cuenta el funcionamiento -nen seco para probar):

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

Si esto va bien, el servidor responde con una respuesta como esta:

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

Y sin el -ninterruptor, el servidor probablemente agrega algo como:

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

Rama principal encontrada: (refs / remotes / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Siguiente padre con do_switch

Se siguió con éxito el padre r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(referencias / controles remotos / auth_bug)

La mejor parte es que ahora puede crear una sucursal local basada en su sucursal remota de la siguiente manera:

git checkout -b local/auth_bug auth_bug

Lo que significa "echa un vistazo y crea una rama local llamada auth_bugy haz que siga la rama remota (último parámetro)auth_bug

Prueba de que su rama local trabaja en esa rama remota mediante el uso de dcommitla --dry-run( -n):

git svn dcommit -n

Y el servidor SVN debería responder con el nuevo nombre de la sucursal:

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


2
Sí, git co significa que Jesper creó un alias git.
Jason Axelson

3
actualizado y reemplazado git cocon el git checkoutfin de que el ejemplo puede trabajar para nadie
Jesper Jensen Rønn-

55
Ya voté esta respuesta, pero no sé cuántas veces vuelvo. ¡Gracias!
Ben Doerr

35
Hay una parte difícil en el git-svn branchcomando: debe estar en línea para crear una nueva rama de esta manera. Puede hacer lo siguiente sin conexión: 1. git checkout -b foobar2. hack-hack-hack 3 git commit -m "Done foobar".. Y cuando esté en línea, empuje este cambio haciendo 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3 git svn dcommit..
vadishev

2
Entonces reemplace el paso 2 con git checkout -b foobar-new remotes/foobar. 3. git checkout foobar4. git rebase foobar-new5. Para probar para asegurarse de que la rama ahora se compromete con la rama svn. git svn dcommit --dry-run6. Finalmente comprometerse git svn dcommit7. Eliminar la rama temporalgit branch -D foobar-new
jjcf89

64

a partir de git v1.6.1, git svn branchestá disponible.

De los documentos de git:

    rama
        Cree una rama en el repositorio SVN.

        -m, --mensaje
            Permite especificar el mensaje de confirmación.

        -t, --tag
            Cree una etiqueta usando tags_subdir en lugar de ramas_subdir
            especificado durante git svn init.

Las versiones anteriores de git no proporcionan una forma de crear una rama svn.


4

@kch Acabo de (7 de diciembre de 2008) compilar la etiqueta v1.6.1-rc1 de git y contiene el comando de rama git svn y la documentación correspondiente. Entonces, la versión v1.6.1 de git debería (con suerte) contener este comando.


de hecho, instalé 1.6.1 ahora y el comando está disponible. Actualicé mi respuesta en consecuencia.
kch
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.