2009-05-05 29 views
30

Trabajo con un software que se guarda en svn para control de versiones. Me gustaría usar git (git-svn); sin embargo, el software requiere mucha configuración y configuración antes de que pueda ser utilizado. Hay herramientas que se encargan de toda la configuración, incluida la comprobación de todo el código a través de svn.Convierta un checkout SVN para usar git (git-svn)

Toda la documentación de git-svn (que he podido encontrar) requiere una nueva comprobación, usando git-svn.

¿Hay alguna manera de convertir un check-in existente para que pueda usar git-svn?

Respuesta

11

se podría hacer algo como esto:

  1. hacer un clon completo de su árbol SVN usando git-svn, en un directorio temporal. Asegúrese de utilizar la misma revisión exacta que su pago existente.
  2. Mueva la carpeta ".git" desde el nivel superior del checkout de git-svn al nivel superior del checkout de SVN.
  3. Luego deberá decirle a Git que ignore los directorios ".svn", o puede eliminarlos todos.
  4. Eliminar la extracción de git-svn.
  5. Allí, ahora puede manipular sus archivos existentes con Git y git-svn.
  6. Realice un "estado de git" y espero que indique que no hay cambios.
+0

No lo tengo funcionando del todo como quiero, pero parece que este tipo de estrategia funcionará. – Jachin

+3

¿Hay alguna manera de lograr eso SIN tener acceso al repositorio svn? Actualmente no tengo forma de acceder al repositorio, todo lo que tengo es una copia de trabajo intacta en la última revisión. Esperaba que tal vez git svn fetch -r N, con N como la revisión de mi copia de trabajo, de alguna manera podría ser persuadido para usar el contenido de la copia de trabajo para obtener la información necesaria ... – Ole

13

No. Un clon de git-svn convierte todo el repositorio en git. Las cajas SVN no tienen el repositorio completo y, por lo tanto, no pueden clonarse. Esta es la principal ventaja de cambiar de SVN o CVS a un sistema distribuido (como git).

+0

Sin embargo, no me importa todo el historial, solo el estado en que se encuentra cuando se comprobó de svn, y los cambios futuros en la rama svn (así que lo que obtendría al llamar a git-svn rebase) – Jachin

+3

Así no es como funciona git. DVCS está "distribuido" porque cada clon es una copia completa del repositorio. Ese es todo el punto. – singpolyma

+0

Nuevamente ves a la gente inteligente explicando, ¿cuánto deberías preocuparte por la historia ... Me importa la historia, pero solo A PARTIR DE AHORA EN ADELANTE, supongo que la historia está destrozada con toneladas de archivos binarios innecesarios (no hay problema en SVN), y solo recientemente, el árbol de trabajo está libre de tales cargas, svn: externals, etc. –

1

Otra manera de hacer esto, que no modifica la copia de trabajo local original y no requiere que usted para copiarlo, es el uso de un parche:

  1. hacer un clon completo de su árbol de Subversion usando git-svn, a un nuevo directorio que será el repositorio de Git. Asegúrese de utilizar la misma revisión exacta que su pago existente. Puede usar git reset --hard :/r<revision> para forzarlo a ser la misma revisión después de la clonación, donde <revision> es la revisión en la que se actualiza la copia de trabajo de Subversion (vea esto usando svn info allí).
  2. cd a su copia de trabajo de Subversion.
  3. Uso svn status para asegurarse de que todos los archivos nuevos están marcados con A (o use svn add para agregarlos), y todos los archivos borrados están marcados con D (o use svn rm para eliminarlos).
  4. Ejecute svn diff >patch.diff para crear un archivo de parche.
  5. Copie patch.diff en la parte superior del repositorio de Git creado anteriormente.
  6. cd en la parte superior del repositorio de Git creado anteriormente.
  7. Ejecute git apply -p0 patch.diff para aplicar el parche en el árbol de trabajo del repositorio de Git.

Ahora usted puede ir a través de los cambios usando git status y git add/git commit ellos para guardarlos en su repositorio local.

4

Supongo que probablemente quiera conservar el historial. Sin embargo, en caso de que usted (o cualquier otra persona que tropiece en esta página) no necesite historial, puede usar la función "exportar" como se explica aquí: https://stackoverflow.com/a/419475/2437521.