C'è un solo livello di rollback perché il rollback non è mai stato concepito come una funzionalità. Il rollback esiste, e ha il suo nome strano, perché è nato dal sistema di transazione commit/push/pull di Mercurial.
Se arriva una spinta di rete e si ottiene il 99% e quindi la connessione viene persa, il repository non deve essere lasciato in uno stato incoerente. Per assicurarsi che un cambiamento incompleto possa essere scartato, un puntatore "prima che qualcosa accadesse" viene creato prima che vengano eseguite le scritture e se la modifica viene interrotta, tutto viene reimpostato su tale stato - viene eseguito il rollback.
Il comando rollback
è in realtà solo "non riuscito" l'operazione precedente dopo che è stata completata correttamente. È solo qualcosa che "è venuto gratis" dopo che è stata progettata la necessaria sicurezza transazionale.
Quando si utilizza qualcosa come un controlling hook si possono definire assegni/test che devono essere passati in modo che un push o un commit vengano completati correttamente. Per non completare correttamente, deve essere possibile annullare tale commit in corso, ma non richiede neanche più livelli.
Come VonC correttamente note il rollback può essere piuttosto pericoloso. Molte modifiche ai rollback di una persona che hanno già spinto e poi diventano molto confuse quando altre modifiche ritornano nelle estrazioni successive. Il comando hg backout
è quasi sempre un'idea migliore.
Si noti inoltre che è possibile simulare un rollback a qualsiasi punto nel tempo facilmente in questo modo:
hg clone -r last_revision_I_want repo_with_things_I_do_not_want new_repo_with_only_good_stuff
fonte
2010-06-18 15:17:13
Dalla mia comprensione, la tua ipotesi è abbastanza ben preciso. Il modo mercuriale è "tutto è immutabile" ... quindi se hai bisogno di ripristinare qualcosa che hai impegnato 8 revisioni fa, il modo "hg" è introdurre un nuovo cambiamento che lo faccia. –