2009-03-26 5 views
17

Esiste un modo per prendere il controllo manuale completo sul processo di unione in Mercurial?completamente manuale merge Mercurial

Voglio essere in grado di scegliere la direzione di file di unione, anche per i file senza conflitti. È possibile?

risposta

20

Turn "pre-merge" off nella configurazione unione. Quindi tutto conta come un conflitto e puoi scegliere "sinistra" o "destra" per ogni cambio di file.

[merge-tools] 
mymergetool.premerge = False 

da MergeToolConfiguration on the Mercurial wiki.

+0

giorno d'oggi i si potrebbe provare 'hg merge --tool interno: prompt' –

+0

Probabilmente sarebbe d'aiuto a qualcuno, perché né frammento di sopra né al di sotto non mi ha aiutato. Ho aggiunto '[ui] -> merge = internal: merge' e completamente disabilitato gli strumenti di risoluzione dopo l'unione fallita. In realtà [questo] (http://i.stack.imgur.com/WNHq4.png) strumento fastidioso ha iniziato ad apparire dopo aver aggiornato la mia versione Mercurial. – ivkremer

2

una fusione è sempre eseguita tra la revisione genitore della directory di lavoro e un'altra revisione, per impostazione predefinita l'altra testa nel repository.

Se si desidera unire in un altro "direzione" è possibile cambiare ramo è nella directory di lavoro verificando una revisione specifica:

hg update -r [rev] 

per vedere quale dirige avete nella vostra repository eseguire il seguente comando:

hg heads 

in alternativa, se si sta utilizzando fetch è possibile utilizzare l'opzione --switch-parent di unire nella direzione opposta:

hg fetch --switch-parent 

Non è possibile modificare la direzione dell'unione su una base file per file poiché Mercurial funziona con i changeset che interessano un intero repository non registrando le modifiche su singoli file come CVS.

+1

Vedo che ha accettato la risposta, ma non penso che sia in realtà quello che stava chiedendo. Gli hai detto come scegliere "left" o "right" per tutti i non-conflict, ma se vuole mixare e abbinare ha bisogno di disattivare la "pre-merge" interna prima di lanciare il suo strumento di unione. –

12

Modificare il file di configurazione in questo modo:

[ui] 
merge = kdiff3 

[merge-tools] 
kdiff3.premerge = false 
kdiff3.args=--L1 base --L2 local --L3 other $base $local $other -o $output 

Di default mette l'argomento --auto su KDiff3 unioni auto così KDiff3.

+0

+1 perché sono alle prese con questo per mezz'ora, e tu sei il primo a raccomandare di rimuovere l'argomento '--auto'. Mi ci vorrà un'eternità per trovarlo (come già mi mancava tutte le altre volte avevo bisogno di unire manualmente). –

1

In caso di KDiff3 è fondamentale aggiungere l'opzione --qall (vedere http://kdiff3.sourceforge.net/doc/documentation.html). Ci sarà una fusione automatica di alcuni conflitti senza questa chiave (come "automaticamente risolvere semplici conflitti" dal menu "Merge"). Quindi la linea di comando più appropriata è:

[ui] 
merge = kdiff3 

[merge-tools] 
kdiff3.premerge = False 
kdiff3.args=$base $local $other -o $output --L1 base --L2 local --L3 other --qall