2011-10-30 14 views
8

Nuestro repositorio de mercurial se atasca cuando intenta actualizar a una rama anterior que tiene un par de subrepo/revisión que ya no existe.¿Cómo arreglar un repositorio de Mercurial que no se actualiza porque apunta a una revisión faltante en el subrepo?

abort: unknown revision '22e9bb6a6cd98be85b995f632b2f72d6298f9354'! 

¿Hay alguna manera de saber Mercurial para actualizar a una revisión o una rama, pero no intentará actualizar los subrepos?

+0

Gracias por hacer esta pregunta. FWIW, parece que esto fue parcheado dos años después de haber preguntado: http://mercurial.808500.n3.nabble.com/PATCH-subrepo-check-phase-of-state-in-each-subrepositories-before-committing-td4005250 .html – weberc2

Respuesta

6

¿El subrepo aún existe en otro lugar? Puede cambiar el puntero a este usando la sección [subpaths], que proporciona una capa de traducción encima de las ubicaciones en .hgsub.

Si realmente no existe en ninguna parte que aun podían algo de magia profunda como:

hg debugsetparent REVISION_YOU_WANT 
cat /dev/null > .hgsub # put an empty .hgsub in place 
hg commit .hgsub 
hg update tip 

Eso se debe crear una nueva revisión que es igual REVISION_YOU_WANT excepto que tiene un archivo .hgsub vacío, por lo que puede entonces actualizar a ella.

Sería mucho mejor si pudiera encontrar el subrepo en una nueva ubicación y apuntarlo con los subtramos.

+0

¿Se va a propagar este truco a otros repositorios de todos modos la próxima vez que lo publique o solo es local? – Pol

+0

Si confirma, se propagará en 'push'. Si no quieres ese clon antes de actuar. Los clones locales son (casi) instantáneos y ocupan (casi) ningún espacio en el disco: son una * gran * forma de probar cosas. –

+2

Tenga en cuenta que si la confirmación a la que intenta actualizar se encuentra en una rama con nombre (que no sea la predeterminada), después de hacer hg debugsetparent , también deberá hacer hg branch . –

Cuestiones relacionadas