Empuje el repository de Git existente a una carpeta en svn

Tengo un repository git existente en el que siempre he estado trabajando. Pero recientemente, necesitaría enviar los commits a svn (no es necesario include toda la fusión, pero al less una única twig principal lineal lo hará)

No soy muy bueno en git / svn, solo soy un usuario general que usa SourceTree y CornerStone o Tortoise con una interfaz de usuario agradable para hacer mis commits, bifurcaciones y labeldo. He usado git-svn antes para migrar un repository svn en git, pero nunca lo hice al revés.

¿Es posible? He buscado varios tutoriales en Google, pero ninguno de ellos funciona. Tampoco soy muy bueno con los términos como rebase , rebase , etc, y agradeceré mucho si hay alguna buena guía para hacer las cosas simples sin necesidad de aprender a través de la parte más compleja de git / svn. (Tan simple como que creo que debe haber personas que enfrentan el mismo problema y lo hicieron antes)

¡Gracias por adelantado!

Bueno, en realidad es bastante simple … primero necesitas clonar tu svn a través de git, y luego agregar el git repo como otro control remoto. Esto te dará dos HEAD separado, por eso necesitas git-rebase tus commit de git en la cabeza de git-svn. Sin embargo, puede haber conflictos ya que svn solo tiene confirmaciones lineales. Esta es la razón por la cual necesitas los diversos commands de git para arreglarlos antes de que finalmente git svn dcommit para enviar todo al svn.

Aquí está el resumen:

1. Crea un git svn clone tracking svn

 git svn clone svn://DEST/repo/projectname/trunk dest 

Ahora tenemos un repository git que rastrea el punto de destino svn para la operación de import.

2: Rastrea el git repo que queremos importar

 cd dest git remote add -f source /path/to/git/source/repo 

Ahora, si inspecciona el historial de git, verá toda una serie de confirmaciones del repository git original y, desconectado de esto, el HEAD maestro más un HEAD git-svn apuntando al commit original (único) de svn clonado.

3: Rebase el repository original de git en git-svn

Aquí es donde yace la magia secreta. Parece que hay muchas maneras de ir desde aquí. Este fue el único que encontré para trabajar. Por supuesto, probé de muchas maneras que fallaron. Una vez que encontré uno que funcionó, dejé de intentarlo. Entonces, si hay una mejor manera en que me gustaría escucharlo, parece que funciona bien.

 git rebase --onto remotes/git-svn --root source/master 

En este punto, me di count de que mi historia de git no era estrictamente lineal; Había trabajado en algunas máquinas, por lo que la historia del tronco se arqueó un poco.

Esto significaba que lo que esperaba que fuera una operación directa (eso es lo que esperarías con un sombrero de SVN) requirió algunas correcciones de rebase a lo largo del path:

 ( gvim foo # fix merge conflict git add foo git rebase --continue ) # ... rinse and repeat 

Esto fue necesario porque las twigs en el repository de origen del trabajo en diferentes máquinas que se fusionaron para formar la línea troncal de desarrollo "fuente" no se aplanaron en una rebase sin algunos ajustes.

En general, los conflictos fueron pequeños y no fueron difíciles de solucionar.

4: empujar hacia arriba a svn

Ahora que hemos arreglado todo por encima de git-svn, es un caso simple de:

git svn dcommit

Para empujar los cambios hacia svn.

Fuente: http://goodliffe.blogspot.sg/2011/08/pushing-git-repository-into-existing.html