2010-04-22 18 views
6

Estoy usando svn. Tengo dos ramas y en ambas se realizaron muchos cambios. Además de una de las ramas se cambiaron los nombres de muchos archivos, por lo que ahora svn no puede ayudarme a fusionar los cambios en esos archivos (bien sé svn limitación).git-svn fusionar 2 ramas svn

  1. ¿Es posible usar git-svn para realizar la fusión de las ramas?
  2. ¿Git-svn también manejará los archivos renombrados?

Gracias

+0

Ver esta respuesta: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to -help-out-with-svn-merge/3585702 # 3585702 –

+0

Ver http://stackoverflow.com/questions/714589/can-git-svn-correctly-populate-svnmergeinfo-properties ... La parte "Editar:" de la segunda respuesta (no la respuesta aceptada) es especialmente agradable –

Respuesta

7

git merge deben ser capaces de detectar (hasta cierto punto) Cambia el nombre.

recursive

Esto sólo se puede resolver dos cabezas usando un algoritmo de combinación de 3 vías.
Además, esto puede detectar y manejar fusiones que implican cambios de nombre.
Esta es la estrategia de combinación predeterminada al tirar o fusionar una rama.

Pero git-svn solo puede importar/exportar desde/hacia SVN, no hacer la fusión.
Y la fusión es complicado:

SALVEDADES

En aras de la simplicidad y la interoperabilidad con un sistema menos capaces (SVN), se recomienda que todos los git svn usuarios clonar, ir a buscar y dcommit directamente desde el servidor SVN, y evite todas las operaciones de git clone/pull/merge/push entre repositorios y sucursales de git.
El método recomendado para intercambiar código entre las ramas de git y los usuarios es git format-patch y git am, o simplemente'comprometing' al repositorio SVN.

No se recomienda ejecutar git merge o git pull en una rama de la que planea comprometerse. Subversion no representa fusiones de ninguna manera razonable o útil; para que los usuarios que usan Subversion no puedan ver las fusiones que hayas realizado. Además, si se fusiona o tira de una rama git que es un espejo de una rama SVN, dcommit puede comprometerse con la rama incorrecta.

Si lo combinación, tenga en cuenta la siguiente regla: git svn dcommit intentará cometer en la parte superior de la SVN nombrado en

git log --grep=^git-svn-id: --first-parent -1 

lo tanto, debe asegurarse de que la más reciente se comprometen de la rama a la que desea comprometerse es el primer padre de la fusión. De lo contrario, se producirá Caos, especialmente si el primer padre es un compromiso más antiguo en la misma rama de SVN.

1

una vez tuve el mismo problema en un proyecto en la universidad.Lo que hice fue lo siguiente:

  • crear un nuevo repositorio git-svn (git svn clone -s https://…)
  • fusionar las ramas con git (git checkout master; git merge branch)
  • la caja del tronco con SVN (svn co https://…/trunk)
  • la copia más de los archivos combinados de git
  • eliminar archivos izquierdo más y directorios con sVN (svn rm)
  • comprometerse con sVN (svn ci)
  • buscar el nuevo commit en git
+0

Gracias por el útil resumen. ¿Fue fácil la fusión de git, más fácil que hacerlo por svn? (Estoy intentando encontrar una respuesta a esto: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to-help-out-with-svn-merge) – inger

+0

Una cosa más , ¿trataste de volver a svn? Si es así, ¿qué problemas estaba obteniendo/esperando? – inger

+0

@inger, no me he comprometido con svn para asegurarme de que no termine forzando fusiones a medias que solo Git entendería. – knittl

0

Use SVN se funden funcionalidades para fusionar ramas SVN, que será más rápido. Usar Git para estos problemas es bastante complejo, crea demasiados conflits ...