what tutorial for control version-control mercurial dvcs repository-design

version-control - tutorial - version control git vs mercurial



Mercurial con mĂșltiples proyectos (3)

Tengo un par de proyectos con diferentes ciclos de publicación en mi repositorio SVN. Las versiones se crean utilizando la estructura de etiquetas clásica en SVN. Cuando hay errores para corregir en los lanzamientos, se crea una rama a partir de una etiqueta, el error se corrige y luego se fusiona desde allí en el tronco.

Ahora, por varias razones, quiero pasar de SVN a mercurial con un sitio de inserción central.

Pregunta: ¿Cuál es la mejor manera de mercurial para organizar proyectos múltiples que comparten poco código entre ellos? ¿Debo crear varios sitios de inserción, uno para cada proyecto?

Incluya en la respuesta una descripción sobre cómo recrear mi etiqueta de liberación, bifurcación de corrección de errores, ... con su versión preferida de diseño de repositorio.

Editar: me gustaría instalar la menor cantidad de extensiones posible.

Edit2:

Dado este diseño de SVN:

. |-- project-a | |-- branches | | |-- 1.x | | `-- feature-1 | |-- tags | `-- trunk `-- project-b |-- branches |-- tags | |-- 1.0 | `-- 1.1 `-- trunk

(gracias @bendin! :))

¿Es mejor trabajar con varios repositorios de inserción de hg

project_a-trunk project_a-1.x project_a-feature-1 project_b-trunk

para las ramas. Las etiquetas se pliegan en la rama correspondiente.

¿O prefieres ir con dos repositorios de inserción en este ejemplo?

project_a project_b

con ramas nombradas y por lo tanto múltiples cabezas dentro de un repo.

La ventaja que veo con los repos de encabezados múltiples es que no tengo que ir a buscar una etiqueta en varios repositorios. La desventaja que veo es que el libro de hg parece desalentar los repos de cabeza múltiples. ¿Qué harías / harías?


Algunos repositorios de subversión agruparán elementos lógicamente no relacionados (es decir, proyectos con diferentes números de versión y ciclos de publicación) en un tronco:

. |-- branches | |-- project-a-1.x | `-- project-a-feature-1 |-- tags | |-- project-a-1.0 | |-- project-b-1.0 | `-- project-b-1.1 `-- trunk |-- project-a `-- project-b

Este tipo de diseño no tiene un análogo directo en mercurial. Cada proyecto que tiene su propio ciclo de publicación y sus propios números de versión debe tener su propio repositorio.

Algunos repositorios de subversión están estructurados para hacer esto dando a cada proyecto su propio tronco, etiquetas y ramas:

. |-- project-a | |-- branches | | |-- 1.x | | `-- feature-1 | |-- tags | `-- trunk `-- project-b |-- branches |-- tags | |-- 1.0 | `-- 1.1 `-- trunk

Puede pensar en cada proyecto como un repositorio lógico dentro de su repositorio físico de subversión. Cada proyecto tiene su propio tronco, etiquetas y ramas. Esto también tiene el beneficio de que puede mantener los nombres de las etiquetas y ramas más cortas porque ya sabe a qué proyecto pertenecen.

Este diseño también es trivial para expresar con una herramienta como mercurial. Cada "proyecto" se convierte en un repositorio mercurial. Las etiquetas y las ramas dentro de ese repositorio son etiquetas y ramas de ese proyecto.


Como dice Bendin, debe crear múltiples repositorios, uno para cada proyecto independiente como inicio.

Las confirmaciones de Mercurial se hacen a nivel de todo un repositorio y no se puede obtener solo un subdirectorio. Esto es diferente de Subversion, que le permite realizar confirmaciones consistentes al comprometer solo algunos archivos, pero luego también le permite extraer solo un subdirectorio.

Cuando realizas una publicación, normalmente agregarás una etiqueta a tu repositorio de Mercurial ( hg tag ). Puede decidir libremente si desea mantener un repositorio de solución de errores para cada versión, o si desea crearlos cuando sea necesario la primera vez. El truco es que

% hg clone -r 1.0 project-a project-a-1.0.x

se puede usar para crear un repositorio project-a-1.0.x que solo tiene el historial hasta la etiqueta 1.0 . A continuación, puede corregir el error en project-a-1.0.x y empujarlo de nuevo a project-a . Se pueden realizar otras correcciones de errores en el repositorio de project-a-1.0.x .