2010-10-07 12 views
9

Actualmente tengo proyecto que consiste en múltiples repositorios, por ejemplo .:Unir varios subrepos en uno y preservar la historia de Mercurial

 
+---Project(main repo) 
    +---Core(subrepo) 
    +---Web(subrepo) 
    \---Tests(subrepo) 

Desafortunadamente el código entre subrepos se acopla bastante por lo que no funciona muy bien con ramas.

¿Hay alguna manera de consolidar los subrepos en un repositorio principal que preserve el historial?

Respuesta

8

Me gustaría empezar con el uso de hg convert con un FileMap que excluye la .hgsub y los subrepos. A continuación, utilice hg convert en los subrepos con las entradas de cambio de nombre en el FileMap como: rename . Core

Una vez que tenga esos nuevos acuerdos de recompra, puede utilizar hg pull -f importar los conjuntos de cambios de los subrepos convierte en el principal convertida repo uno a la vez. También deberá fusionarlos en su nuevo repositorio principal (forman encabezados separados con la revisión nula como el antecesor común más reciente).

+0

Casi lo que quería. ¿Alguna idea sobre cómo preservar el mismo diseño de carpeta? – Regent

+0

@regent: Agregué un comentario a la respuesta de yanjost diciendo cómo hacer esto; Ahora lo he incorporado a mi respuesta. –

+0

Oye, no estaba tan lejos de la solución;) – yanjost

3

Primera conjetura: ¿Quizás usando el convert extension con un mapa de archivos?

Otro intento:

  • Tire todos sus repositorios en la misma cesión temporal, tendrá diferentes cabezales para la rama "default"
  • Luego, para cada cabeza
    • actualización a esta cabeza
    • Mueva los archivos (hg move) al directorio correcto
  • Me RGE todo el "default" cabezas juntas

Edit: añadido más detalles, y otra oportunidad

+0

Todo lo que he visto hasta ahora usa 'filemap' para dividir en lugar de unir ... – Regent

+0

Parece que 'convert' incluso no intenta convertir subrepos al convertir el main. – Regent

+0

Force-pulling funcionó! ¿Pero alguna idea sobre cómo preservar el mismo diseño de directorio? (Actualmente los contenidos de 'Core',' Web' y 'Tests' están en la misma carpeta' Project'.) – Regent

0

Suponiendo que no tiene que convertir los repos, ¿por qué no simplemente empujar cada repositorio en el central?

  1. Asegúrese de que cada directorio raíz repo tenga un directorio principal con el nombre del nombre del repositorio.
  2. empuja cada repos en el repositorio principal.
Cuestiones relacionadas