Tengo un proyecto maestro que utiliza un enfoque de árbol de fuentes bastante estándar + supertiposidades mercuriales.Superpositorios mercuriales: administración de jerarquías de dependencia más complejas
Master
\lib - compiled binaries - things like log4net, AutoFac, etc
\source - VS solution, one folder per project, etc
\tools - stuff used during the build process
\source\contrib - contains any subrepos like so:
\source\contrib\Sub1
\source\contrib\Sub2
Master\.hgsub contains something like
source\contrib\Sub1 = https://myserver.com/Sub1
Ahora, se determinó recientemente que Sub2 necesita un poco de código de Sub 1, y por lo tanto tengo que ajustar para esta nueva estructura de dependencias.
El problema, por supuesto, es que si sigo el mismo enfoque que el anterior y agrego Sub1 como un subrepos de Sub2, termino con esta situación fea.
\source\contrib\Sub2\source\contrib\Sub1
¡Master ahora tiene 2 copias independientes de Sub1!
Así que sé que debería estar usando rutas relativas al hacer referencia a los subrepos (el RHS de =), pero eso no ayudará a mi escenario aquí, tal como lo entiendo. No creo que haya ninguna forma de hacer que el LHS viva fuera del del repositorio Maestro, lo que I piensa que es lo que realmente necesito aquí.
Tengo un par de ideas sobre cómo solucionar esto, pero ninguna me sienta bien, y supongo que tiene que haber una manera mejor. Mi solución ideal me permite compartir el mismo sub-repo entre múltiples proyectos sin pagar la penalidad de tener varias copias. Eso sólo parece derrochador e ineficiente en mi escenario aquí (además, me gustaría tener todos los proyectos que tienen una dependencia en Sub1 utilizar la misma revisión de Hg, en lugar de ser independiente Revisioned)
Retire Sub1 como un subrepos de Master, y cambiar las rutas relativas en la solución Master para hacer referencia al Sub1 doblemente anidado. Esta estructura de ruta no solo es horrible, pero si agrego un Sub3 al máster que tiene una dependencia en Sub1, aún tengo 2 copias de Sub1.
Compile una copia de Sub1 y simplemente colóquela en el directorio \ lib. Sub1 todavía está experimentando una rotación, y prefiero compilar contra las versiones fuente. No quiero pagar el impuesto de copiar constantemente en binarios nuevos al árbol fuente todo el tiempo (y abotagar el árbol).
De alguna manera rompa la dependencia de Sub2 en Sub1. Según la arquitectura de los repositorios, esto probablemente no va a suceder. Sub1 contiene un código de biblioteca compartida de propósito muy general. Sub2 contiene el contrato de servicio WCF/interfaz/tipos que se necesita en dos proyectos muy separados: un SDK de cliente y la implementación del servidor. En este momento, tiene sentido mantener estos repositorios separados.
Tal vez estoy pensando en esto mal ... o tal vez no estoy al tanto de algún truco de hg.
Cualquier ayuda es apreciada.
Bueno, eso no es una solución totalmente terribles supongo y creo que debería resolver el problema, siempre y cuando todos los días tengo código dependiente en una configuración de tipo 'hermanos' . Por supuesto, luego termino con un repositorio adicional en Mercurial para mantener a los hermanos juntos, pero esa podría ser la compensación que tengo que hacer. Gracias por la idea, no lo había considerado. –
Aún no está listo para marcar una respuesta, esperando que alguien de Selenic responda con una "mejor práctica" 0 –
Un repositorio adicional no debería doler, ya que debería usar enlaces duros para los archivos en el repositorio. –