2010-01-18 10 views
7

Diciamo che clonare un repository Mercurial remoto (tramite la rete locale o anche su Internet) per provare qualcosa.
Io lavoro nel mio clone, faccio alcuni commit ... e poi mi rendo conto che i miei cambiamenti non hanno senso e devo ricominciare da capo.Il modo più veloce per "resettare" il repository Mercurial alla versione X (senza clonazione)

Quindi voglio avere di nuovo un clone "nuovo", dallo stesso repository di origine.
Fondamentalmente, voglio "resettare" il mio repository locale al punto prima di iniziare a sperimentare.

Qual è il modo migliore/più veloce per farlo?

Il modo più semplice sarebbe quello di creare un nuovo clone, ma HG copia nuovamente l'intero repository e l'intera cronologia sulla rete.
Se il repository è veramente grande, ci vorrà del tempo e/o bloccare la rete.

Ho provato a creare un nuovo clone nella stessa cartella (sperando che HG lo riconoscesse e aggiorni solo i file che sono stati modificati e la cronologia) ma sembra che copi anche l'intero repo.

Potrei "hg rollback", ma questo ripristina solo l'ultimo commit. Se ho fatto diversi commit, posso solo annullare l'ultimo. Quindi non posso resettare il repository al punto prima che iniziassi a commettere.

Qualche idea?
Non c'è davvero altro modo di clonare il tutto di nuovo?
(nota: una soluzione con TortoiseHg sarebbe bello ... io preferisco questo oltre la linea di comando)

risposta

17

Ci finirai usando hg strip come suggerisce gizmo, ma il modo tradizionale per farlo sarebbe quello di clonare di nuovo - non dal repository remoto, ma dal repository locale. Ad esempio, se si verifica sia 'repository' e hai di modifiche 99 e 100 che non ti piace faresti aggiunto:

cd .. 
hg clone -r 98 respository repository-scrubbed 
mv repository respository-with-crap-I-do-not-want 
mv repository-scrubbed repository 

che dovrebbe essere quasi istantaneo.

1

hg update -r <changeset number> esempio hg update -r 1 per la seconda versione. È possibile utilizzare hg log per vedere quale versione si desidera

+2

Questo non ripristinerebbe il sistema nello stesso stato in cui era stato clonato - avresti ancora i commit che sono stati effettuati da "ieri" –

8

Se si abilita lo Mq Extension, è possibile utilizzare il comando "striscia hg" che rimuoverà la cronologia che non si desidera più.
Ulteriori informazioni sono disponibili sulla pagina wiki Strip command.

+0

ha funzionato per me –

Problemi correlati