2011-10-30 6 views
8

Il nostro repository mercurial si blocca quando si tenta di aggiornare a un vecchio ramo che ha una coppia subrepo/revisione che non esiste più.Come risolvere un repository Mercurial che non riesce ad aggiornare perché punta alla revisione mancante nel subrepo?

abort: unknown revision '22e9bb6a6cd98be85b995f632b2f72d6298f9354'! 

C'è un modo per dire a Mercurial di aggiornare ad una revisione o un ramo, ma non tentare di aggiornare i subrepos?

+0

Grazie per avermi fatto questa domanda. FWIW, sembra che questo sia stato corretto due anni dopo che hai chiesto: http://mercurial.808500.n3.nabble.com/PATCH-subrepo-check-phase-of-state-in-each-subrepositories-before-committing-td4005250 .html – weberc2

risposta

6

Il sottorepo esiste ancora da qualche altra parte? È possibile cambiare il puntatore ad esso utilizzando la sezione [subpaths], che fornisce un livello di traduzione in cima alle posizioni in .hgsub.

Se davvero non esiste da nessuna parte si potrebbe così una profonda magia come:

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

Questo dovrebbe creare una nuova revisione che è proprio come REVISION_YOU_WANT eccetto che ha un file .hgsub vuoto, in modo da poter poi aggiorna ad esso.

Sarebbe molto meglio se fosse possibile trovare il sottorepo in una nuova posizione e puntare ad esso con i sottotracciati.

+0

Questo attacco verrà propagato ad altri repository comunque la prossima volta che spingo o è solo locale? – Pol

+0

Se si esegue il commit, verrà propagato su 'push. Se non vuoi quel clone prima di agire. I cloni locali sono (quasi) istantanei e occupano (quasi) senza spazio su disco - sono un * ottimo * modo di provare qualcosa. –

+2

Si noti che se il commit a cui si sta tentando di eseguire l'aggiornamento è su una diramazione con nome (diversa da quella predefinita), dopo aver eseguito hg debugsetparent , sarà necessario eseguire anche il ramo hg . –

Problemi correlati