¿Cómo debo organizar repositorys mercuriales cuando migro desde svn?

Tenemos nuestro proyecto almacenado en subversion de la siguiente manera:

  • tronco (el desarrollo principal va aquí)
  • twigs
    • estable (versión de producción de software)
    • interno (la versión antigua e interna del software se guarda aquí y solo muy raramente se confirma el nuevo código aquí)

¿Cómo debería organizar mis repositorys mercurial para alojarlo? He creado tres repositorys, uno para el tronco y uno para cada twig como serveres centrales, pero dado que mercurial tiene twigs, entonces quizás lo estoy haciendo mal. Al less se siente mal, pero cuando traté de empujar un solo set de cambios desde el repository local de desarrollo al repository local estable, empujé todos mis nuevos sets de cambios. Eso no es lo que quería.

EDIT1

Tenía la revisión 623 en el maletero y 620 en el establo. Quería impulsar solo el set de cambios 623 a estable. hg push -r623 ../stable , pero hg me informó que se hg push -r623 ../stable 4 sets de cambios.

Ok, abordemos esta pregunta a la vez.

Tenga en count que para el layout y la organización, hay muchas maneras de hacerlo, y la única persona que realmente decide es usted.

Mi consejo, sin embargo, con el flujo de trabajo que ha delineado en su comentario, es usar un repository pnetworkingeterminado y estable, usando twigs con nombre para los dos.

En cuanto al código anterior, lo mantendría en un repository separado, y simplemente combinaría lo que necesita del primario, si necesita hacer eso.

Como tal, así es como lo organizaría:

  • Repositorio primario
    • twig pnetworkingeterminada (siempre tienes esto en Mercurial), esto es lo que anteriormente llamabas tronco
    • twig estable (esto es similar a su twig estable anterior)
  • Repositorio de código antiguo
    • twig pnetworkingeterminada, extraída del repository principal
    • "antigua" twig, el código anterior, puede fusionar fácilmente de forma pnetworkingeterminada a la antigua cuando necesita
      • si no necesita fusionar desde el valor pnetworkingeterminado al anterior, coloque todo el código anterior en la twig pnetworkingeterminada y no cree una twig con nombre para el código anterior

Centrándose en el repository principal, esto le otorga las siguientes habilidades:

  • Puede actualizar de ida y vuelta en una única carpeta de trabajo entre pnetworkingeterminada y estable
  • Usted puede dif fácilmente a través de las sucursales
  • Puede fusionar fácilmente de una twig a otra, en ambos sentidos
  • Las tags son globales, visibles todo el time

La última pregunta es, ¿cómo puedes seleccionar los sets de cambios cuando se fusionan?

Bueno, no puedes. Fusionar combina el set de cambios que eligió + todos sus antepasados. Así es como se fusiona en Mercurial.

Hay dos forms de mitigar esto:

  • extensión de trasplante
  • comprometer el set de cambios en otro lugar para comenzar

La extensión de trasplante le permite tomar uno o más sets de cambios de una twig y copyrlos (trasplantarlos) en otra twig. Los sets de cambios se labelrán como trasplantados, por lo que las fusiones futuras no tropezarán con esto. El problema, sin embargo, es que aparte de lo que agregue a los posts de confirmación, no hay líneas visibles en el logging gráfico para indicar que esto es lo que hizo.

El otro enfoque, para comprometer el set de cambios en otra parte, probablemente se describe mejor con un ejemplo.

Supongamos que tiene las dos twigs siguientes:

 default: 1--2--3--4--5--6 \ stable: x--y--z 

Ahora, desea confirmar el set de cambios 7 sobre el set de cambios 6 por defecto, y luego "fusionar" solo ese set de cambios, y no 2-5, en la twig estable, y como he dicho, la fusión no hará eso.

Lo que puede hacer en su lugar es encontrar el ancestro común anterior, 1 en este caso, confirmar el nuevo set de cambios sobre ese set de cambios, en efecto, get este logging de repository:

 default: 1--2--3--4--5--6 | |\ +--- | 7 \ stable: x--y--z 

Luego puede fusionar el 7º set de cambios en estable y por defecto:

 default: 1--2--3--4--5--6--7 | |\ / +--- | 7------+------+ \ \ stable: x--y--z--7 

Así es como TortoiseHg muestra ese último repository, acabo de mover las tags:

Exhibición de TortoiseHg