C'è un'alternativa alla elaborazione dello storico (aka gingillarsi in MQ) per il fissaggio rinomina. La procedura manuale è delineata come here come logica utilizzata dall'estensione di fixrenames.
La procedura manuale è la seguente. Per ogni revisione N per i quali vi sono rinomina non contrassegnati:
$ hg update n-1
$ hg revert --all --rev n
$ hg addremove -s 70
$ hg commit -m "Fix renames from n"
$ hg merge n
Nota che la bandiera similitudine a volte richiede giocherellare. Il motivo è che le rinomine non sono quasi mai dei rinomati. Ad esempio, la ridenominazione di una classe richiede una modifica nel file e una modifica nel nome file. Quindi non sono al 100% uguali. Dovrai rivedere cosa fa addremove e assicurarti che i file aggiunti siano contrassegnati come "X (rinominato da Y)".
In questo modo è possibile recuperare la cronologia completa senza un po 'di lavoro manuale. Dovevo farlo oggi (senza usare l'estensione fixrenames) e mi ci sono voluti circa 5 minuti per risolvere il problema.
È possibile applicare questa procedura anche in caso di set di modifiche impilati da correggere.
Il grafico del changeset sarebbe simile a questo. Si consideri changeset A, B, C & D. B e D aveva rinomina errati:
D
|
C
|
B
|
A
Innanzitutto aggiornamento di una, fare un inplace ripristinare B, facciamo l'addremove e compiere come E. Poi si fondono in C E come F poiché C non ha avuto niente di sbagliato in questo.Si dovrebbe vedere qualcosa di simile:
F D
|\|
| C
| |
E B
|/
A
Ora applicare lo stesso per D. Aggiorniamo a F, tornare da D, addremove e si impegnano a G. Ora dobbiamo solo si fondono per chiudere la testa in più. Si dovrebbe vedere qualcosa di simile:
H
|\
G |
| |
F D
|\|
| C
| |
E B
|/
A
Se si vuole convincere la vostra auto che questo ha lavorato si può sempre
hg diff -r D -r H
A seconda del vostro strumento, vedrete sia alcuna differenza o file rinominati elencato ma senza differenze tra loro.
Fare un elenco di tutte le modifiche, tornare ai pre-cambiamenti, quindi aggiornare manualmente ogni file sembra il modo più manuale per farlo. Speravo in un modo più automatico, a prova di idiota. –
Mercurial non sa come i tuoi cambiamenti debbano essere diversi. Non c'è "sostituire i file cancellati e aggiunti i cui nomi sono simili con la ridenominazione di quei file". Git sarebbe meglio qui, guarda il contenuto e probabilmente ti suggerirebbe di cambiare i nomi dei file o qualcosa, piuttosto che cancellare e aggiungere i file. – MrFox