2010-03-29 10 views
6

Tengo una rama en un repositorio svn mal estructurado que necesita ser eliminado y movido a otro repositorio svn. (Estoy tratando de limpiarlo).¿Cómo migrar una base de código de un repositorio svn a otro preservando el historial?

Si hago una parada svn log y no en copia/renombrado puedo ver todo 3427 se compromete a que me importa. ¿Hay alguna manera de volcar las revisiones, sin escribir algunos guiones importantes?

Seguiría el consejo en this question pero esta rama se ha movido por todas partes y me gustaría conservar los movimientos también.

+3

He hecho preguntas similares y 'svndumpfilter' siempre fue la respuesta estándar. ¿Estás seguro de que no va a ser bueno para ti? –

+0

Bueno, podría usar svndumpfilter, pero creo que tendré que hacer al menos 9 cambios de ruta en los puntos del vertedero. Simplemente no sabía si había una solución automatizada. (El repositorio está demasiado desordenado para usar git-svn). – chotchki

+0

¿Por qué no importar las revisiones tal como están y cambiarles el nombre en subversión? No hay necesidad de reescribir la historia? –

Respuesta

2

supongo que esto podría ser similar a lo que significan @ZacThompson (y @Pekka): Creo svndumpfilter es su amigo.

De su pregunta, ¿cree que tiene la idea de lo que se supone que debe hacer pero le cuesta copiar y mover la rama por todos lados? Una respuesta a eso se puede encontrar en el antes mencionado SVN Documentation, creo:

También, rutas copiadas puede darle un poco de problemas. Subversion admite las operaciones de copia en el repositorio, donde se crea una nueva ruta copiando alguna ruta existente . Es posible que en algún momento de su vida útil su repositorio, puede haber copiado un archivo o directorio desde alguna ubicación que svndumpfilter excluye, a una ubicación que está incluyendo. Para hacer el autosuficiente, svndumpfilter todavía necesita enseñar el Además de los datos de volcado de la nueva ruta, incluyendo los contenido de los archivos creados por el de copiar y no representa que la adición como una copia de una fuente que no existirá en la secuencia de datos de volcado filtrado . Pero debido a que el formato de volcado de depósito de Subversion muestra solo lo que se modificó en cada revisión, el contenido de la fuente de copia podría no estar disponible . Si sospecha de que tiene todas las copias de este tipo en su repositorio, es posible que desee , reflexionar sobre el conjunto de incluido/excluido caminos, tal vez incluyendo los caminos que sirvieron como fuentes de sus operaciones de copia molestos, también.

Significado: hacer svndumpfilter incluyen todos los caminos la rama haya vivido en. ¿O me estoy perdiendo algo?

Otra posibilidad podría ser la svndumpfilter2 mencionada por @compie en el hilo que vinculó, aunque creo que ni siquiera es necesario (y no conozco ni a @compie ni a svndumpfilter2).

+0

No sabía sobre svndumpfilter2 pero parece ser lo que estoy buscando. Voy a probarlo y ver cómo funciona. – chotchki

+0

Aún no he terminado mi esfuerzo de migración (enorme repo 30k + commits) pero este método parece prometedor. – chotchki

-2

Debe utilizar HotCopy para hacer una copia de seguridad del directorio del repositorio. Entonces debería ser una cuestión de simplemente restaurar el repositorio.

+1

Creo que está hablando de eliminar una estructura muy compleja (con varios movimientos dentro de ella) de un repositorio que contiene mucho más. –

+0

No se puede usar la copia en caliente para esto, que solo se puede usar para hacer copias completas de los repositorios –

0

Hay otra solución que es bastante simple y resuelve el problema "preserve the moves". Consulte el último párrafo de la entrada de FAQ de Apache Subversion "How do I completely remove a file from the repository's history?". La solución no se basa en el svndumpfilter.

Puede realizar los siguientes pasos:

  1. Configurar path-based authorization reglas a niegan acceso de lectura para un cuenta nombre de usuario al CAMINOS del archivo o una carpeta que desea eliminar del repositorio historia.

    Tenga en cuenta el sustantivo plural rutas. El archivo o la carpeta que desea eliminar podría tener diferentes nombres o puede ubicarse en diferentes lugares a lo largo de un historial de repositorio. Por favor, considere esto al configurar las reglas de denegación.

  2. Crear un repositorio vacío,

  3. replicar el repositorio de código fuente con svnsync herramienta para el repositorio de destino en cuenta NOMBRE DE USUARIO. Para obtener más información sobre la sincronización del repositorio con svnsync, consulte el capítulo "Repository Replication" del SVNBook.

diferencia svndumpfilter, svnsync se traduce automáticamente svn copy operaciones con una ruta de origen ilegible en adiciones normales, que es útil si la historia implica operaciones de copia y todavía tiene que ser filtrada. :)

Cuestiones relacionadas