14 votos

Mercurial repositorio de la corrupción

Esto es algo relacionado con esta pregunta , pero es una cuestión diferente.

Nosotros tenemos un centro de Hg repositorio, sirve a los usuarios a través de SSH y mercurial-servidor. Tenemos un número de Mac, Linux y Windows los clientes que se conecten a ella.

Se ha pasado dos veces ya que uno de los usuarios de Windows ha dañado su repositorio, luego empujó de vuelta a la central se dañe. Quiero escribir una entrada de script gancho en el repositorio central para evitar una transacción de ser aceptado si se corrompe la central de repos.

Aunque por desgracia no sé lo suficiente acerca de Mercurial para escribir una secuencia de comandos. Cualquier posibilidad de que alguien ha llegado a través de esta? Personalmente, no estoy muy seguro de por qué hg no hace esto por defecto.

4voto

durin42 Puntos 241

Las versiones recientes de Mercurial (desde 1.5) apoyo a la validación de los datos de entrada. Agregar

[server]
validate = True

para su servidor hg config ( .hg/hgrc o el hgwebdir config debería funcionar bien) para que el servidor compruebe los datos de entrada y se niegan inválida empuja. El cliente, a continuación, vea un mensaje de error similar a:

remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify

Espero que ayude!

2voto

picardo Puntos 6094

Tal vez usted debería evitar empujar a repositorio completo. Con Mercurial y su naturaleza distribuida, todo el mundo puede tener su rama, y cuando sienten que están listos, se les dice y tire de ellos. No comprometen a problemas de acceso, no empuje que va a romper cosas...

Esta es, al menos, un consejo, un amigo mío me ha dado, cuando yo estaba emigrando de SVN para Mercurial.

No sé, si esto es una opción para usted, pero la creación de un repositorio personal para todo el mundo y, a continuación, tire de la gente que usted necesita puede requerir menos trabajo, que tratando de atrapar a peligrosos empuja.

0voto

jgauffin Puntos 54

No podrías hacer lo mismo que David Herrera del Blog, pero en lugar de hacerlo en prerouting, lo hacen en el precommit gancho en el centro de la repo?

0voto

Bruno Shine Puntos 944

Una alternativa posible es:

  1. Clonar el repositorio DESPUÉS de la inserción.
  2. Verificar.
  3. Si el repositorio es buena, archivarlo como la última buena
  4. Si el repositorio está dañado, dar la señal de alarma
  5. En caso de alarma, restaurar la última buena conocida repositorio.

Esta solución no es lo que se requiere, pero al menos, que conseguir una manera de revertir su repositorio en el caso de la corrupción.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: