2011-09-02 19 views
7

He visto personas que sugieren usar git-svn para hacer la fusión y volver a asignarla a svn.¿Cómo uso git-svn para combinar los cambios del tronco a una rama en svn?

Estoy buscando una buena guía paso a paso.

  • Vale la pena o simplemente debería usar svn para hacerlo.
  • ¿La gente verá que he usado git y hay algún metadato sobre la fusión en svn?
  • ¿Puedo hacer un clon de tronco y 1 rama que selecciono?
  • ¿Necesito un clon completo o puedo importarlo desde el punto donde se hizo la rama?
+0

Puede valer la pena y no será visible que haya usado git en lugar de svn. Sin embargo, ten mucho cuidado con la forma en que usas 'git rebase'. Realmente puede hacer un lío de la historia de svn. –

+0

¿Qué tipo de fusión? ¿Compromisos/revisiones seleccionados? ¿O es esta una rama de características que desea mantener actualizado con las confirmaciones del tronco, con la intención de reintegrarse al tronco? –

+0

Para obtener una guía paso a paso: de http://myhumblecorner.wordpress.com/2011/08/25/git-svn-cheatsheet-for-git-rebels-in-an-svn-workplace/ 'git checkout ; git merge --squash ; git commit; git svn dcommit # --squash is key' –

Respuesta

3

Vale la pena el problema o debería simplemente usar svn para hacerlo.

Creo que depende de la cantidad de información que desea conservar en SVN. Si haces la fusión usando git, creo que SVN no sabrá de dónde vienen los cambios, o en otras palabras, parecerá que el tronco y la rama de SVN aún están separados.

¿La gente verá que he usado git y hay algún metadato sobre la combinación en svn?

No, simplemente se vería como una nueva confirmación en el maletero.

¿Puedo hacer un clon de tronco y 1 rama que selecciono?

Si quieres clonar tu git-svn en un nuevo git repo, entonces sí. Solo clona el git-svn y elimina las ramas extrañas, o hazlo directamente en el repositorio git-svn antes de clonar.

Aquí hay una publicación de cómo convert an SVN repo to a git one. Creo que la mayor parte se aplicaría en esta situación.

¿Necesito un clon completo o puedo importarlo desde el punto donde se hizo la rama ?

Los clones de Git generalmente serán clones completos, a menos que utilice la opción --depth. Si desea descartar el historial anterior, siempre puede aplastar todas las confirmaciones en una anterior, o simplemente eliminar el directorio .git e iniciar un nuevo repositorio.

+2

Git puede hacer clones parciales en http://stackoverflow.com/questions/747075/how-to-git-svn-clone-the-last-n-revisions-from-a-subversion-repository – hdorio

+0

@Doud, gracias por la correccion. – cmcginty

1

He leído algunos artículos de personas que sugieren esto, pero creo que solo debería usarse si ambos trabajan con GIT y SVN para el mismo código (repositorio local con git y repositorio alojado con svn). Yo aconsejo que sólo se adhieren a su VCS y obtener una herramienta de combinación adecuada como BeyondCompare o Kaleidoscope

Un pequeño tutorial sobre git-svn se puede encontrar en

http://flavio.castelli.name/howto_use_git_with_svn

+0

+1 Es una buena publicación de blog, pero no cubre la fusión. –

10

He utilizado las instrucciones en esta publicación con mucho éxito.http://justaddwater.dk/2009/03/09/using-git-for-svn-repositories-workflow/

Utilizo git para fusionar entre las ramas y luego las asigno al repositorio svn. Esto no sigue el procedimiento de fusión para svn, por lo que puede ser un problema para otros usuarios. la propiedad svn: merge no está establecida

git-svn no deja ninguna evidencia en el repositorio svn que esté usando git-svn.

+1

+1 La mejor respuesta hasta ahora. Y porque eres Dave. –

+0

Creo que me falta algo. ¿Estás diciendo que las ramas SVN deberían aparecer como ramas git en "git branch -a"? Las únicas ramas que veo son las que he creado y "remotes/git-svn". Las ramas SVN solo aparecen como su estructura de directorio. Estas instrucciones me preguntan si SVN tiene un concepto de ramas del lado del servidor que no estamos usando aquí. – benkc

+0

Si encuentra esto, se ha perdido la opción -s en git clone. – boutta

Cuestiones relacionadas