2013-06-05 10 views
6

Background:Rompere il collegamento file in Mercurial dopo cattiva file diviso

All'inizio c'era un file base.c, e che il file era nel repository che aveva solo un ramo Base.

Base era ramificato per rendere Extended -branch. Quindi questo nuovo ramo ha apportato diverse modifiche a base.c.

Se i bug sono stati corretti nel file base.c in Base, sarebbero uniti a Extended.

Si scopre che aggiungere troppe cose a base.c nel ramo Extended non era una buona idea, quindi il file viene copiato in ext.c. Quindi la maggior parte delle aggiunte Extended vengono rimosse dalle funzionalità base.c e Base da ext.c. Quindi, a questo punto base.c in Extended è molto simile a Base.

Problema:

Quando il file è stato diviso, Mercurial è stato informato che ext.c è una copia di base.c, perché condividevano una storia comune. Sfortunatamente questa non era una buona idea.

Ora, se i bug sono fissi su Base ramo e fuse per Extended, Mercurial pensa che tali modifiche devono essere applicate a entrambi base.c e ext.c, anche se quest'ultimo non è più ha delle somiglianze con l'ex. Questo rende le unioni molto fastidiose.

C'è un modo per dire al Mercurial che ext.c non dovrebbe più essere considerato come base.c? Una soluzione sarebbe quella di sostituire ext.c con il nuovo file, ma la cronologia non verrebbe seguita.

+0

Interessante problema. Immagino tu abbia fatto la copia con 'hg copy'? – icabod

+0

Si è utilizzato 'hg copy'. – user694733

+4

È possibile interrompere la connessione se si 'hg dimentica ext.c' e quindi' hg add' it come un nuovo file ... ma poi si perde tutta la cronologia fino a questo punto. Tuttavia, potresti aggiungere una versione _earlier_ di 'ext.c' (forse anche prima della rinomina), e replay (graft) è storia da allora. – alexis

risposta

2

È possibile interrompere la connessione con hg forget ext.c e quindi hg add ext.c come nuovo file. Ma se lo fai con la revisione tip di ext.c, perderai tutta la cronologia fino a questo punto.

Ciò che si può fare invece è aggiungere una versione precedente di ext.c, magari anche prima della rinomina, e rivedere (innestare) la sua cronologia da allora. Si potrebbe aggiungere la storia di ext.c come un ramo per una revisione passato, e si fondono in punta:

---o---o---o---(tip)--(merge) 
    \    /
    e---e---e ... e 

O forse non importa, e si può semplicemente aggiungere la storia del ext.c alla corrente tip:

---o---o---o---(tip)--e--e--e--e 

Nessuno di questi approcci comporta alcuna storia riscrivere (la versione "dimenticato" di ext.c è appena lasciato come un vicolo cieco), quindi non ci dovrebbero essere problemi con i cambiamenti che si propagano.

Problemi correlati