Cómo lidiar con Mercurial cuando la corrupción / restauración del disco ha devuelto el repository principal a un estado anterior

Me pregunto si alguien puede darme consejos sobre cómo sobrellevar las consecuencias de que uno de nuestros discos se corrompa y se restaure a un estado anterior. Aquí está la historia:

Tengo un código que administro con Mercurial. Hay un repository "maestro" en el disco A, y una twig / clon en el disco B. La línea de time se ve así

  1. Comience con el repository principal. Existen varias twigs / clones existentes para la creación de prototypes de nuevas características.
  2. clonar repository maestro en el disco A -> otra nueva twig en el disco B
  3. confirmar los cambios en el repository maestro y enviar a una nueva sucursal
  4. el disco A está dañado
  5. el disco A se restablece al estado en el punto de time 1.
  6. El disco B no se ve afectado

¿Que debería hacer?

Opción 1: – Muy poco ha sucedido en la twig desde la ramificación real. Así que simplemente elimine el repository maestro y comience a utilizar la nueva twig como mi nuevo maestro. Si hago esto, ¿no tendré problemas para fusionar mis viejos clones (mencionados en el punto de time 0)?

Opción2: – Solo haga manualmente los cambios en mi maestro que se han perdido mi diferencia con la nueva twig. Incluso si hago esto, ¿cómo voy a seguir empujando a la nueva sucursal?

Opción 3: – Simplemente haga manualmente los cambios en mi maestro que se han perdido mi diferencia con la nueva twig. Luego, borre la nueva twig y clone una nueva.

Cualquier consejo, bienvenidos, saludos, Zam

Sé que dices que la pregunta está respondida, pero déjame darte algunos consejos de todos modos. Usted pregunta:

Opción 1: muy poco ha sucedido en la twig desde la ramificación real. Así que simplemente elimine el repository maestro y comience a usar la nueva twig como mi nuevo maestro. Si hago esto, ¿no tendré problemas para fusionar mis viejos clones (mencionados en el punto de time 0)?

No tendrás ningún problema con la fusión de viejos clones del repository principal. Imagine que tiene el maestro repo M y los clones X e Y Digamos que contienen cambios como este (el time fluye hacia la derecha):

 M: [m1] --- [m2] --- [m3] X: [m1] --- [x1] --- [x2] Y: [m1] --- [m2] --- [y1] --- [y2] 

Entonces X era un clon de M cuando solo [m1] existía, Y es un clon de M después de que [m2] se hizo. Ni X ni Y tienen [m3] – este set de cambios aparentemente se envió directamente al repository M al trabajar en el server.

Ahora descubre que el disco con M es defectuoso y lo restaura desde la copy de security. La copy de security solo tiene [m1] . La situación mundial ahora se ve así:

 M: [m1] X: [m1] --- [x1] --- [x2] Y: [m1] --- [m2] --- [y1] --- [y2] 

Cuando compare las situaciones generales verá que solo falta el set de cambios [m3] : es el que no estaba en ninguno de los clones ( X e Y ).

Después de la restauración, puede presionar [m2] de Y a M para recuperar la mayor cantidad de datos posible. Esto se hace con un simple

 $ hg push -r m2 

donde m2 es el número de revisión o hash del set de cambios en cuestión.

Así que mi consejo es mirar la image general: encuentre sus clones y descubra qué sets de cambios todavía tiene distribuidos entre ellos y qué falta. Empuje lo que necesita de vuelta al repository principal y configure un esquema de copy de security con copys de security más frecuentes 🙂

Tenga en count también que solo perdió [m2] porque solo existía en un solo clon. Normalmente, creará nuevos sets de cambios en clones locales y luego los empujará a un repository principal. De esta forma, ¡automáticamente tendrá un duplicado de todos los sets de cambios en el maestro! Eso hace que sea más difícil perder sets de cambios ya que las personas pueden simplemente retrasar su trabajo después de una restauración.