Come configuro e utilizzo Meld come mio git difftool?
git difftool mostra il diff usando un programma diff GUI (cioè Meld) invece di visualizzare l'output diff nel tuo terminale.
Sebbene sia possibile impostare il programma GUI sulla riga di comando mediante -t <tool> / --tool=<tool>esso, ha più senso configurarlo nel .gitconfigfile. [Nota: vedere le sezioni relative alla fuga tra virgolette e percorsi di Windows in basso.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[Nota: queste impostazioni non modificheranno il comportamento git diffche continuerà a funzionare normalmente.]
Usi git difftoolesattamente allo stesso modo in cui usi git diff. per esempio
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
Se configurato correttamente, si aprirà una finestra Meld che mostra il diff utilizzando un'interfaccia GUI.
L'ordine dei riquadri della finestra della GUI di Meld può essere controllato dall'ordine di $LOCALe $REMOTEin cmd, vale a dire quale file è mostrato nel riquadro sinistro e quale nel riquadro destro. Se li vuoi viceversa, semplicemente scambiali in questo modo:
cmd = meld "$REMOTE" "$LOCAL"
Infine, la prompt = falselinea semplicemente impedisce a git di chiederti se vuoi avviare Meld o meno, per impostazione predefinita git emetterà un prompt.
Come configuro e uso Meld come mio git mergetool?
git mergetool ti permette di usare un programma di unione GUI (cioè Meld) per risolvere i conflitti di unione che si sono verificati durante un'unione.
Come difftool, puoi impostare il programma GUI sulla riga di comando usando -t <tool> / --tool=<tool>ma, come prima, ha più senso configurarlo nel tuo .gitconfigfile. [Nota: vedere le sezioni relative alla fuga tra virgolette e percorsi di Windows in basso.]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
NON si utilizza git mergetoolper eseguire una fusione effettiva. Prima di usare git mergetoolesegui un'unione come al solito con git. per esempio
git checkout master
git merge branch_name
Se c'è un conflitto di unione, git mostrerà qualcosa del genere:
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
A questo punto file_nameconterrà il file parzialmente unito con le informazioni sul conflitto di unione (che è il file con tutte le voci >>>>>>>e <<<<<<<in esso).
Ora è possibile utilizzare Mergetool per risolvere i conflitti di unione. Lo inizi molto facilmente con:
git mergetool
Se configurato correttamente, si aprirà una finestra Meld che visualizza 3 file. Ogni file sarà contenuto in un riquadro separato della sua interfaccia GUI.
Nella .gitconfigvoce di esempio sopra, vengono suggerite 2 linee come [mergetool "meld"] cmdlinea. In effetti ci sono tutti i tipi di modi per gli utenti avanzati di configurare la cmdlinea, ma questo va oltre lo scopo di questa risposta.
Questa risposta ha 2 cmdlinee alternative che, tra loro, soddisfano la maggior parte degli utenti e saranno un buon punto di partenza per utenti avanzati che desiderano portare lo strumento al livello successivo di complessità.
Innanzitutto ecco cosa significano i parametri:
$LOCAL è il file nel ramo corrente (ad es. master).
$REMOTE è il file nel ramo da unire (ad esempio nome_ramo).
$MERGED è il file parzialmente unito con le informazioni di conflitto di unione in esso.
$BASEè l'antenato del commit condiviso di $LOCALe $REMOTE, vale a dire il file com'era quando il ramo contenente $REMOTEera stato originariamente creato.
Ti suggerisco di usare:
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
o:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
La scelta è se usare $MERGEDo $BASEtra $LOCALe $REMOTE.
In entrambi i casi, Meld visualizzerà 3 riquadri con $LOCALe $REMOTEnei riquadri sinistro e destro e $MERGEDo $BASEnel riquadro centrale.
In ENTRAMBI i casi, il riquadro centrale è il file che è necessario modificare per risolvere i conflitti di unione. La differenza sta proprio nella posizione di modifica iniziale che preferisci; $MERGEDper il file che contiene il file parzialmente unito con le informazioni sul conflitto di unione o $BASEper l'antenato del commit condiviso di $LOCALe $REMOTE. [Dato che entrambe le cmdrighe possono essere utili le tengo entrambe nel mio .gitconfigfile. La maggior parte delle volte uso la $MERGEDlinea e la $BASElinea è commentata, ma il commento può essere scambiato se invece voglio usare la $BASElinea.]
Nota sul file di output: non preoccuparti che --output "$MERGED"venga utilizzato cmdindipendentemente dal fatto che $MERGEDsia $BASEstato usato in precedenza nella cmdriga. L' --outputopzione indica semplicemente a Meld in quale nome di file git desidera salvare il file di risoluzione dei conflitti. Meld salverà le modifiche ai conflitti in quel file indipendentemente dal fatto che tu usi $MERGEDo $BASEcome punto di modifica iniziale.
Dopo aver modificato il riquadro centrale per risolvere i conflitti di unione, è sufficiente salvare il file e chiudere la finestra Combina. Git eseguirà l'aggiornamento automaticamente e il file nel ramo corrente (ad es. Master) conterrà ora tutto ciò che hai trovato nel riquadro centrale.
git avrà eseguito un backup del file parzialmente unito con le informazioni di conflitto di unione in esso aggiungendo .origal nome file originale. es file_name.orig. Dopo aver verificato che sei soddisfatto dell'unione e aver eseguito tutti i test che potresti voler fare, il .origfile può essere eliminato.
A questo punto ora puoi eseguire un commit per eseguire il commit delle modifiche.
Se, durante la modifica dei conflitti di unione in Combinazione, si desidera abbandonare l'uso di Combinazione, quindi chiudere Combinazione senza salvare il file di risoluzione di unione nel riquadro centrale. git risponderà con il messaggio file_name seems unchangede poi chiederà Was the merge successful? [y/n], se rispondi, nla risoluzione del conflitto di unione verrà interrotta e il file rimarrà invariato. Nota che se hai salvato il file in Meld in qualsiasi momento, non riceverai l'avviso e il prompt da git. [Ovviamente puoi semplicemente eliminare il file e sostituirlo con il .origfile di backup che git ha creato per te.]
Se hai più di 1 file con conflitti di unione, git aprirà una nuova finestra di fusione per ognuno, uno dopo l'altro fino a quando non saranno stati completati. Non saranno tutti aperti contemporaneamente, ma quando finisci di modificare i conflitti in uno e chiudi Meld, git aprirà il successivo e così via fino a quando tutti i conflitti di unione non saranno stati risolti.
Sarebbe sensato creare un progetto fittizio per testare l'utilizzo git mergetoolprima di utilizzarlo su un progetto dal vivo . Assicurati di utilizzare un nome file contenente uno spazio nel test, nel caso in cui il tuo sistema operativo richieda di sfuggire alle virgolette nella cmdriga, vedi sotto.
Caratteri di citazione di escape
Alcuni sistemi operativi potrebbero dover avere le virgolette in cmdescape. Gli utenti meno esperti dovrebbero ricordare che le righe di comando di configurazione devono essere testate con nomi di file che includono spazi e se le cmdlinee non funzionano con i nomi di file che includono spazi, prova a sfuggire alle virgolette. per esempio
cmd = meld \"$LOCAL\" \"$REMOTE\"
In alcuni casi potrebbe essere necessario scappare virgolette più complesse. Il primo dei collegamenti del percorso di Windows di seguito contiene un esempio di triplo escape di ogni preventivo. È noioso ma a volte necessario. per esempio
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Percorsi di Windows
Gli utenti Windows avranno probabilmente bisogno di un'ulteriore configurazione aggiunta alle cmdlinee di fusione . Potrebbe essere necessario utilizzare il percorso completo a meldc, progettato per essere richiamato su Windows dalla riga di comando, oppure potrebbe essere necessario o desiderare utilizzare un wrapper. Dovrebbero leggere le pagine StackOverflow collegate di seguito che riguardano l'impostazione della cmdlinea Meld corretta per Windows. Dato che sono un utente Linux, non sono in grado di testare le varie cmdlinee di Windows e non ho ulteriori informazioni sull'argomento oltre a raccomandare di usare i miei esempi con l'aggiunta di un percorso completo a Meld o meldc, o l'aggiunta della cartella del programma Meld alla tua path.
Ignorando gli spazi bianchi finali con Meld
La combinazione ha una serie di preferenze che possono essere configurate nella GUI.
Nella Text Filtersscheda delle preferenze ci sono diversi filtri utili per ignorare cose come i commenti quando si esegue un diff. Sebbene ci siano filtri da ignorare All whitespacee Leading whitespace, non esiste alcun Trailing whitespacefiltro da ignorare (questo è stato suggerito come aggiunta nella mailing list di Meld ma non è disponibile nella mia versione).
Ignorare gli spazi vuoti finali è spesso molto utile, specialmente durante la collaborazione, e può essere aggiunto manualmente facilmente con una semplice espressione regolare nella Text Filtersscheda Preferenze di fusione .
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
Spero che questo possa aiutare tutti.