Tengo un número de proyectos cuasi relacionados que deseo controlar la versión. En SVN Me instalarlas como varios directorios dentro de un solo proyectoDisposición de depósito Mercurial para múltiples ramas
/scripts #updates in sync with project1 & project2
/project1 #requires database
/project2 #requires database
/database
Naturalmente otros diseños SVN son posibles para este ejemplo de juguete, pero esta disposición tiene ventajas:
- puedo copiar archivos entre ramas conservando el historial
- Puedo consultar solo un subconjunto de proyectos, por ej.
svn co repo/project2; svn co repo/database
. Esto ahorra una cantidad considerable de tiempo de almacenamiento & si project1 es grande. - Fácil gestión del repositorio, ya que el acceso del usuario se define una vez para todos los proyectos
Este paradigma no mapa bien a Mercurial desde you can't clone a single directory of a mercurial repo. Entonces mi pregunta es: ¿cuál es la forma más común de almacenar grandes proyectos estrechamente relacionados en mercurial?
Mis ideas:
- múltiples repositorios - pierde historial de los archivos que se mueven entre los proyectos
- Forests - parece estancado, y no estoy seguro de la estabilidad de esta extensión es
- ramas nombradas con su mayoría contenido no relacionado
- SubRepos - Desafortunadamente estoy ejecutando Ubuntu 9.04, que solo envía hg 1.1.2. De lo contrario, esto se vería como una buena opción
Wow, gracias por los pasos de rama nombrados. Eso es demasiado feo para considerar. Me ocuparé de perder la historia; de todos modos, fue un caso bastante raro. En realidad, un problema mayor que la fusión de cambios entre proyectos es la sincronización de dependencias. Es decir. project1 @ r50 necesita database @ r50. Esto se puede hacer con svn, aunque requiere un proceso de pago un poco más complicado que el anterior. – Quantum7
Sincronizar dependencias es exactamente para lo que son SubRepos y Forests. – Omnifarious
Para más detalles, considero que SubRepos y Forests es una implementación de svn: externals para Mercurial, y con la mentalidad de Mercurial de que los metadatos deben almacenarse explícitamente en archivos en lugar de adjuntarse implícitamente a ellos y gestionarse con comandos VCS de propósito especial. – Omnifarious