En mi organización, nos gustaría cambiar de usar CVS a Mercurial por una variedad de razones. Hemos investigado mucho al tratar de determinar cómo debemos organizar nuestros repositorios de Hg en función de lo que tenemos en nuestra base de código y cómo trabajamos. Hemos obtenido respuestas satisfactorias para la mayoría de nuestras preguntas, pero hay un punto que nos está afectando un poco, y me está volviendo loco porque la forma más conveniente de organizar el repositorio para nuestro flujo de trabajo parece ser la forma incorrecta de hacerlo. un punto de vista conceptual. Estoy tratando de averiguar si nuestra percepción de cómo se supone que "se supone" funciona es incorrecta, o si estamos simplemente tropezando con una brecha de características legítima en las herramientas disponibles.Recuperaciones monolíticas frente a múltiples Mercurial para módulos dentro de un conjunto de aplicaciones relacionadas
Principalmente mantenemos una base de código de tamaño mediano que consiste en un conjunto de aplicaciones que obtienen todo liberado en el mismo paquete. Conceptualmente se puede dividir nuestro código en tres categorías:
- de código compartido código
- Solicitud de nuestra suite principal (utiliza el código compartido)
- pequeñas utilidades Varios que se mantienen con poca frecuencia (utiliza el código compartido)
Esto no me parece inusual, pero quiero enfatizar el hecho de que mantenemos el código de la aplicación y el código compartido al mismo tiempo y siempre queremos que estén a la última. Es decir, queremos que todas nuestras compilaciones de aplicaciones utilicen siempre la última versión y la misma versión del código compartido. Con frecuencia agregamos o modificamos el código de la aplicación y el código compartido al mismo tiempo. Actualmente, el código compartido está en un módulo CVS, y las aplicaciones están todas en sus propios módulos separados. El código compartido y los módulos de la aplicación están desprotegidos de manera que el código compartido se genera una vez y luego se vincula a cada aplicación. Frecuentemente hacemos cvs commits que incluyen cambios a través de módulos compartidos y de aplicaciones a la vez. Realmente nos gustaría mantener esa habilidad.
Entiendo que los commits en Hg son atómicos dentro de los repositorios, está bien, pero me gustaría ser capaz de diferenciar y comprometerme con una aplicación y una biblioteca compartida al mismo tiempo (es decir, no me importa) si es realmente atómico, pero no quiero tener que hacer manualmente dos diffs separados y dos acciones de commit separadas).
Conceptualmente, parece que sería correcto tener uno o unos repositorios para el código compartido, y un repositorio por separado para cada aplicación y cada pequeño programa de utilidad. Esto significa que deberías verificar múltiples repositorios para cada compilación, pero eso no es un problema para nosotros. El problema es que no parece haber ninguna herramienta que le permita ver las actualizaciones o los cambios en varios repositorios a la vez, o diferir varios repositorios a la vez y luego enviarlos secuencialmente por usted. Esto sería fácil de realizar, pero eso no ayudaría a los desarrolladores que desean usar varias interfaces GUI para complementar la línea de comando.
Parece que con el fin de ser capaz de comprometerse a través de múltiples bases de código a la vez (desde la perspectiva del usuario) y mantener todo en la punta de lanza en conjunto, las dos únicas soluciones son:
- Usar un acuerdo de recompra monolítica con TODO en ella.
- Crea algunos subrepos pero accede/confirma todo a través de un gran repositorio "principal" monolítico que contiene todos los subrepos para mantener todo en las últimas revisiones (que no me parece mejor que (1)).
No puede ser tan inusual querer trabajar con múltiples repositorios "pares" al mismo tiempo, incluso si las acciones no son realmente atómicas en todos ellos, y sin embargo, no estoy encontrando toneladas de artículos o publicaciones clamando por esta habilidad.
En resumen:
- Nos gustaría organizar nuestro código de tal manera que podemos ver diferencias y comprometerse código de la aplicación y el código compartido al mismo tiempo, desde la perspectiva del usuario (que no necesitan realmente ser atómica).
- Parece que deberíamos poner código de aplicación y código compartido en repositorios separados.
- Subrepositorios vinculan repositorios principales a revisiones específicas, que no queremos.
¿Qué es lo que falta aquí?
¿Cuál es su argumento en contra de tener un gran repositorio con todo lo que contiene? Si todo el código está relacionado y debe mantenerse sincronizado entre sí, ¿por qué no hacer eso? – jwd
¿Puede darnos una idea de "mediano"? ¿Tal vez un tamaño total aproximado de todos los archivos fuente en la suite? Además, el n. ° 3 en su resumen no me es claro: ¿qué quiere decir con "empate" y por qué no lo quiere? –
Mi argumento más convincente en contra de tener un gran repositorio con todo lo que contiene es que si quisiéramos compartir el código con otros departamentos a través del repositorio, tendríamos que darles acceso a todo el código. No necesariamente es un factor decisivo, pero no excelente. – rationull