2011-12-13 14 views
18

ho usato per lavorare con 3-way merge strumenti come BC3, SourceGear, o P4, che mostrano di solito 4 componenti: base di, lasciato, destra, e risultato fusa.Git 4-way merge

Cosa Git sembra fare, ed è giusto così soprattutto nei casi di un git rebase --onto sembrano essere una fusione a 4 vie: sinistra-base, sinistra, destra-base, destra, risultato unito. O in altre parole, prendendo la patch diff fatta sul lato sinistro (locale), e cercando di unirla con una patch diff fatta sul lato destro (remoto).

unita = Sinistra-Diff-Path + Destra-Diff-Path

Vuoi sapere nulla di buono strumento che mostra i 4 componenti, se non v'è alcun tipo di sostegno al giorno d'oggi?

risposta

2

Non penso che esista. Ho sempre sentito che BC3 e P4Merge erano i migliori.

+0

Potete fornire qualche chiarimento su come P4Merge per esempio potrebbe essere usato per unire 4 versioni di file come descritto nella domanda, se è possibile? Mi trovo a voler unire le modifiche in un ramo in un altro ramo che ha subito le sue modifiche da quando è derivato dal primo. So che Team Foundation Server può farlo automaticamente (per la maggior parte delle parti) se si effettua il check-in, ma voglio farlo prima di controllare qualche cosa a volte. – BlueMonkMN

+0

Questo non è quello che è stato chiesto. Se vuoi unire 4 variazioni, puoi con octopus unire 'git unire branch1 branch2 branch3 branch4'. Se si ottengono conflitti, l'unione di polpo si interrompe, non è possibile risolvere più di 2 versioni in conflitto. Detto questo, puoi unire ciascuno di essi 1 alla volta. quindi schiaccia tutte le unioni nel primo. Si conserva quello che sarebbe stato se i genitori avessero lavorato la fusione di polpo scrivendo tutti gli SHA1 delle punte dei rami che si stanno unendo su linee separate in '.git/MERGE_HEAD'. Ora quando ti impegni, il commit che generi avrà i 4 genitori che vuoi. –

+0

Dopo ulteriori ricerche, ho appreso che la mia comprensione della fusione a 3 vie deve essere stata confusa e tutto ciò di cui avevo davvero bisogno era una semplice unione a 3 vie nel mio caso. Dispiace per la confusione. Ho pensato che quando avevo due rami, una versione root comune e una versione modificata di un ramo che volevo unire nell'altro avevo bisogno di più di un'unione a 3 vie, ma non l'ho fatto. Posso semplicemente ignorare la versione radice comune apparentemente e le cose funzionano benissimo nel mio caso. – BlueMonkMN

2

diffuse sembra essere installato di default sulla mia stazione di lavoro Fedora17; capita anche di essere il default, in qualche modo, come io non ha specificato nulla sulla mia .gitconfig, ancora:

git mergetool 

appena apre, mostrando subito i file corretti per l'editing.

Anche Meld sembra in grado di gestirlo, ho dovuto installarlo e ha un aspetto migliore.

+1

Non sono sicuro del motivo per cui la mia risposta viene respinta. Diffuse mostra correttamente le unioni a 4 vie. Aggiunta di fusione. – Sanne

+2

Qualche possibilità di uno screenshot che mostri diff/merge a 4 vie? Ho visto solo diffondere/fondere fare a due vie. –

+1

Ok, sembra che diffuse * * faccia una diff via arbitraria, ma solo su singoli file. –