2010-04-02 15 views
9

Mi compañía está cambiando de Subversion a Mercurial. Estamos usando .NET para nuestro producto. Tenemos una solución con aproximadamente una docena de proyectos que son módulos separados sin dependencias entre ellos. Estamos utilizando un repositorio central en un servidor con push/pull para nuestra compilación de integración.Configuración de mercurial: ¿un depósito central o varios?

Estoy tratando de averiguar si debo crear un repositorio central con todos los proyectos en él, o si debería crear un repositorio por separado para cada proyecto. Un argumento para repositorios separados es que la ramificación de los módulos individuales sería más fácil, pero un argumento para un repositorio único es una gestión y un flujo de trabajo más sencillos.

Soy muy nuevo en hg y DVCS, por lo que se agradece mucho la orientación.

ETA: En hginit.com, Joel dice:

[S] i que está acostumbrado a tener un gran repositorio de gigantesca para toda la empresa , donde algunas personas sólo verifican a cabo y el trabajo en los subdirectorios que les importa, esta no es una muy buena forma de trabajar con Mercurial -usted está mejor teniendo muchos repositorios más pequeños para cada proyecto.

Sería genial si alguien pudiera ampliar esto o dirigirme a más documentación.

Respuesta

5

Una cosa que debe tener en cuenta aquí es el hecho de que Mercurial no admite el control de directorios como lo hace la subversión. Una configuración de subversión típica es tener un repositorio gigante con múltiples proyectos separados en él, y cuando alguien necesita un código, ellos simplemente obtendrán un subdirectorio que contiene ese proyecto. No puedes hacer esto en mercurial. O tomas todo el repositorio, o nada. Si todos los que trabajan en estos proyectos no necesitan todo el código, todo el tiempo, es posible que desee dividirlo en repositorios separados.

EDITAR: This El enlace puede ser útil para configurar las cosas, en particular la sección "Publicar varios repositorios".

+0

Los desarrolladores de mi equipo son todos usuarios de SVN, por lo que están pensando en la línea de "pago y envío". Ellos piensan: "Si estoy trabajando en el código del programador y un desarrollador confirma el código de las tablas, necesito el código de las tablas. ¿Cómo lo obtengo?" Con un repositorio, eso es fácil. Pero con repos múltiples y en mantenedores, ¿cuál es el flujo de trabajo? –

+0

Esto puede ser un problema de descubrimiento, es decir, ¿cómo sabe un desarrollador qué repositorio clonar y dónde está? Agregué un enlace a mi publicación con información sobre cómo configurar y publicar múltiples repositorios. – TwentyMiles

+2

Para nosotros (java con maven) los repos mercuriales funcionaron mejor, cuando se dividieron en la unidad lógica más pequeña posible. Entonces, en la práctica, si teníamos una API para un proyecto, eso se colocaba en su propio repositorio. El código Impl entró en su propio repositorio. Este flujo de trabajo requiere un uso inteligente de subrepos y/o el hábito de atraer a los repositorios con frecuencia. El flujo de trabajo fue beneficioso en términos de CI, ya que la configuración es fácil y el ciclo de retroalimentación es rápido. Hicimos nuestro descubrimiento de cambios, p. por RSS de la CI. Siempre se podía ver fácilmente si algo había cambiado, porque luego pasó por el ciclo de CI. –

0

Soy bastante nuevo en Mercurial (mi compañía está dando el salto desde SourceSafe) así que no sé qué más experiencia diría.

Para mí tiene sentido tener un repositorio por solución de Visual Studio. Si sus módulos realmente no son dependientes entre sí, ¿por qué están todos en la misma solución? Si tiene una buena razón para que todos estén en una solución, entonces esa es probablemente la razón para mantenerlos en un repositorio. Si no hay una buena razón para que estén en una solución, entonces un repositorio y una solución para cada uno tienen más sentido para mí.

Edición: Entonces, dado que todos los módulos están construidos juntos y necesitan integrarse, eso me empujaría hacia una única solución y un único repositorio.

Mercurial hace un gran trabajo de fusión, pero la única cosa con la que he tenido problemas es en el archivo de solución al fusionar la adición de más de un proyecto a la vez. Se confunde con múltiples líneas End Project. Por lo tanto, siempre que no agregue nuevos proyectos muy a menudo, sus fusiones deben ser fluidas.

+1

Están en la misma solución porque esa solución es una especie de "construcción de integración". Dado que la aplicación es una aplicación WPF, probar los elementos de la interfaz de usuario requiere ejecutar todo el proyecto con todos los módulos integrados. –

1

si los repos completamente separados no funcionan para usted, tal vez tenga cada proyecto como un subrepo de algún repositorio paraguas. Debo decir que los repos separados suenan como lo que necesita, dado que cada proyecto suena totalmente independiente.

0

De mi experiencia, y no basada en estudios, etc., diría que cada blob lógico es un repositorio. Si comparte código entre subproyectos, deben estar en el mismo repositorio. No será ser la funcionalidad completa de subrepo, pero actualmente (apr 2010) no está completamente implementado.

+0

Si hay algunos componentes comunes, entonces esos podrían almacenarse en repositorios separados, para ser incluidos en cada proyecto dependiente. De esta forma, no es necesario copiar y pegar módulos, pero aún así obtener el código de la biblioteca cerca del proyecto. No creo que los subrepos recursivos sean compatibles, por lo que las dependencias difíciles no se manejan necesariamente de esta manera. –

Cuestiones relacionadas