Come risolvere interattivamente (visivamente) i conflitti in SourceTree / git


119

Sto usando (Windows) SourceTree per il mio progetto git. Posso farlo sia dal prompt dei comandi che dal terminale Linux.

Ma mi chiedo se esista un modo carino per risolvere i conflitti in modo interattivo e visivo. Ad esempio, se pull rileva conflitti, viene visualizzato uno strumento di conflitto basato su GUI (ad esempio, P4Merge). È possibile?

Sto sempre risolvendo manualmente i conflitti, il che è semplicemente doloroso.

Questo è, ad esempio, un pullmessaggio git , da SourceTree.

git -c diff.mnemonicprefix=false -c core.quotepath=false pull --no-commit origin master
From W:\repo\
 * branch            master     -> FETCH_HEAD   

Updating 33c07bf..41e0249

error: Your local changes to the following files would be overwritten by merge:
    foo.cpp
    goo.cpp
    goo.hpp
Please, commit your changes or stash them before you can merge.
Aborting    

Completed with errors, see above.

Risposte:


135

Da SourceTree, fare clic su Strumenti-> Opzioni. Quindi nella scheda "Generale", assicurati di selezionare la casella per consentire a SourceTree di modificare i tuoi file di configurazione Git.

Quindi passare alla scheda "Diff". Nella metà inferiore, utilizza il menu a discesa per selezionare il programma esterno che desideri utilizzare per eseguire le differenze e l'unione. Ho installato KDiff3 e mi piace abbastanza bene. Quando hai finito, fai clic su OK.

Ora, quando c'è un'unione, puoi andare in Azioni-> Risolvi conflitti-> Avvia strumento di unione esterna.


4
Ho provato questo, ma alla fine, non vedo oltre il confronto quando viene lanciato. Vedo confrontare i file generati, ma questo è tutto. Non riesco a risolvere il conflitto. Anche cambiare questo al confronto standard / predefinito non sembra aiutare.
Echiban

1
@echiban Probabilmente hai la licenza standard per Beyond Compare che non accetta l'unione a 3 vie. Devi diventare professionista per usarlo come git mergetool
pierdevara

6
Dopo aver seguito tutti i passaggi per configurare "Launch External Merge Tool" è ancora disattivato per me, nessun modo per attivarlo
pal4life

2
Inoltre non stavo selezionando il file di conflitto di unione, una volta che l'ho fatto è andato tutto bene
pal4life

2
Ho dovuto fare clic sulla voce "Modifiche non confermate" nell'elenco di commit prima che fosse disattivata.
Micah Zoltu

11

Sto usando SourceTree insieme a TortoiseMerge / Diff, che è uno strumento diff / merge molto semplice e conveniente.

Se desideri utilizzarlo anche tu, allora:

  1. Ottieni la versione standalone di TortoiseMerge / Diff (piuttosto vecchia, dal momento che non viene fornita standalone dalla versione 1.6.7 di TortosieSVN, ovvero da luglio 2011). Link e dettagli in questa risposta .

  2. Decomprimere TortoiseIDiff.exee TortoiseMerge.exein qualsiasi cartella ( c:\Program Files (x86)\Atlassian\SourceTree\extras\nel mio caso).

  3. In SourceTree aprire Tools > Options > Diff > External Diff / Merge. Seleziona TortoiseMergein entrambi gli elenchi a discesa.

  4. Premi OKe punta SourceTree sulla tua posizione di TortoiseIDiff.exee TortoiseMerge.exe.

Successivamente, puoi selezionare Resolve Conflicts > Launch External Merge Tooldal menu contestuale su ogni file in conflitto nel tuo repository locale. Questo aprirà TortoiseMerge, dove potrai affrontare facilmente tutti i conflitti che hai. Una volta terminato, chiudi semplicemente TortoiseMerge (non hai nemmeno bisogno di salvare le modifiche, probabilmente questo verrà fatto automaticamente) e dopo pochi secondi SourceTree dovrebbe gestirlo con grazia.

L'unico problema è che crea automaticamente una copia di backup, anche se l'opzione appropriata è deselezionata .


4

Quando il menu Risolvi conflitti-> Contenuto è disabilitato, uno potrebbe trovarsi nell'elenco dei file in sospeso. Dobbiamo selezionare l'opzione File in conflitto dal menu a discesa (in alto)

spero che sia d'aiuto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.