Wie richte ich Meld als Git-Difftool ein und verwende es?
git difftool zeigt das Diff mit einem GUI-Diff-Programm (dh Meld) an, anstatt die Diff-Ausgabe in Ihrem Terminal anzuzeigen.
Obwohl Sie das GUI-Programm über die Befehlszeile festlegen können, -t <tool> / --tool=<tool>ist es sinnvoller, es in Ihrer .gitconfigDatei zu konfigurieren . [Hinweis: Siehe die Abschnitte zum Anhalten von Anführungszeichen und Windows-Pfaden unten.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[Hinweis: Diese Einstellungen ändern nicht das Verhalten, git diffdas weiterhin wie gewohnt funktioniert.]
Sie verwenden git difftoolgenau so, wie Sie verwenden git diff. z.B
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
Bei ordnungsgemäßer Konfiguration wird ein Meld-Fenster geöffnet, in dem das Diff über eine GUI-Oberfläche angezeigt wird.
Die Reihenfolge der Meld-GUI-Fensterfenster kann durch die Reihenfolge von $LOCALund $REMOTEin gesteuert werden cmd, dh welche Datei im linken Bereich und welche im rechten Bereich angezeigt wird. Wenn Sie sie umgekehrt haben möchten, tauschen Sie sie einfach so aus:
cmd = meld "$REMOTE" "$LOCAL"
Schließlich verhindert die prompt = falseZeile einfach, dass git Sie dazu auffordert, ob Sie Meld starten möchten oder nicht. Standardmäßig gibt git eine Eingabeaufforderung aus.
Wie richte ich Meld als Git-Mergetool ein und verwende es?
Mit git mergetool können Sie ein GUI-Zusammenführungsprogramm (z. B. Meld) verwenden, um die Zusammenführungskonflikte zu lösen, die während einer Zusammenführung aufgetreten sind.
Wie bei difftool können Sie das GUI-Programm in der Befehlszeile über festlegen. Nach -t <tool> / --tool=<tool>wie vor ist es jedoch sinnvoller, es in Ihrer .gitconfigDatei zu konfigurieren . [Hinweis: Siehe die Abschnitte zum Anhalten von Anführungszeichen und Windows-Pfaden unten.]
# 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"
Sie verwenden NICHT git mergetool, um eine tatsächliche Zusammenführung durchzuführen. Vor der Verwendung führen git mergetoolSie eine Zusammenführung mit git auf die übliche Weise durch. z.B
git checkout master
git merge branch_name
Wenn es einen Zusammenführungskonflikt gibt, zeigt git ungefähr Folgendes an:
$ 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.
Zu diesem Zeitpunkt file_nameenthält die teilweise zusammengeführte Datei die Informationen zum Zusammenführungskonflikt (dies ist die Datei mit allen >>>>>>>und <<<<<<<Einträgen darin).
Mergetool kann jetzt verwendet werden, um die Zusammenführungskonflikte zu lösen. Sie beginnen es sehr einfach mit:
git mergetool
Bei ordnungsgemäßer Konfiguration wird ein Meldungsfenster mit 3 Dateien geöffnet. Jede Datei wird in einem separaten Bereich der GUI-Oberfläche enthalten sein.
Im .gitconfigobigen Beispieleintrag werden 2 Zeilen als [mergetool "meld"] cmdZeile vorgeschlagen. Tatsächlich gibt es für fortgeschrittene Benutzer alle Arten von Möglichkeiten, die cmdLeitung zu konfigurieren , aber das würde den Rahmen dieser Antwort sprengen.
Diese Antwort enthält zwei alternative cmdZeilen, die für die meisten Benutzer geeignet sind und einen guten Ausgangspunkt für fortgeschrittene Benutzer darstellen, die das Tool auf die nächste Komplexitätsstufe bringen möchten.
Erstens bedeuten die Parameter Folgendes:
$LOCAL ist die Datei im aktuellen Zweig (zB Master).
$REMOTE ist die Datei in der Verzweigung, die zusammengeführt wird (z. B. Verzweigungsname).
$MERGED ist die teilweise zusammengeführte Datei mit den darin enthaltenen Informationen zum Zusammenführungskonflikt.
$BASEist der Vorfahr des gemeinsam genutzten Commits von $LOCALund $REMOTE, dh die Datei ist so, wie sie war, als der Zweig, der sie enthielt, $REMOTEursprünglich erstellt wurde.
Ich schlage vor, Sie verwenden entweder:
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
oder:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
Die Wahl ist, ob $MERGEDoder $BASEzwischen $LOCALund verwendet werden soll $REMOTE.
In beiden Fällen zeigt Meld 3 Fenster mit $LOCALund $REMOTEim linken und rechten Fenster sowie entweder $MERGEDoder $BASEim mittleren Bereich an.
In BEIDEN Fällen ist der mittlere Bereich die Datei, die Sie bearbeiten sollten, um die Zusammenführungskonflikte zu lösen. Der Unterschied besteht darin, in welcher Startposition Sie die Bearbeitung bevorzugen. $MERGEDfür die Datei, die die teilweise zusammengeführte Datei mit den Zusammenführungskonfliktinformationen enthält, oder $BASEfür den gemeinsam genutzten Commit-Vorfahren von $LOCALund $REMOTE. [Da beide cmdZeilen nützlich sein können, behalte ich beide in meiner .gitconfigDatei. Die meiste Zeit benutze ich die $MERGEDZeile und die $BASEZeile ist auskommentiert, aber das Auskommentieren kann vertauscht werden, wenn ich $BASEstattdessen die Zeile verwenden möchte .]
Hinweis zur Ausgabedatei: Machen Sie sich keine Sorgen, dass diese verwendet --output "$MERGED"wird, cmdunabhängig davon, ob sie früher in der Zeile verwendet wurde $MERGEDoder $BASEwurde cmd. Die --outputOption teilt Meld einfach mit, in welchem Dateinamen git die Konfliktlösungsdatei gespeichert werden soll. Meld speichert Ihre Konfliktbearbeitungen in dieser Datei, unabhängig davon, ob Sie sie verwenden $MERGEDoder $BASEals Startpunkt für die Bearbeitung verwenden.
Speichern Sie nach dem Bearbeiten des mittleren Bereichs zur Lösung der Zusammenführungskonflikte einfach die Datei und schließen Sie das Meldungsfenster. Git führt das Update automatisch durch und die Datei im aktuellen Zweig (z. B. Master) enthält jetzt alles, was Sie im mittleren Bereich gefunden haben.
git hat eine Sicherungskopie der teilweise zusammengeführten Datei mit den darin enthaltenen Informationen zum Zusammenführungskonflikt erstellt, indem es .origan den ursprünglichen Dateinamen angehängt wurde. zB file_name.orig. Nachdem Sie überprüft haben, ob Sie mit dem Zusammenführen zufrieden sind, und alle Tests ausgeführt haben, die Sie möglicherweise durchführen möchten, kann die .origDatei gelöscht werden.
An diesem Punkt können Sie jetzt ein Commit ausführen, um die Änderungen festzuschreiben.
Wenn Sie während der Bearbeitung der Zusammenführungskonflikte in Meld die Verwendung von Meld aufgeben möchten, beenden Sie Meld, ohne die Zusammenführungsauflösungsdatei im mittleren Bereich zu speichern. git antwortet mit der Nachricht file_name seems unchangedund fragt dann Was the merge successful? [y/n], wenn Sie antworten, nwird die Lösung des Zusammenführungskonflikts abgebrochen und die Datei bleibt unverändert. Beachten Sie, dass Sie die Warnung und Aufforderung von git nicht erhalten, wenn Sie die Datei zu irgendeinem Zeitpunkt in Meld gespeichert haben. [Natürlich können Sie die Datei einfach löschen und durch die Sicherungsdatei ersetzen .orig, die git für Sie erstellt hat.]
Wenn Sie mehr als eine Datei mit Zusammenführungskonflikten haben, öffnet git nacheinander jeweils ein neues Meld-Fenster, bis alle fertig sind. Sie werden nicht alle gleichzeitig geöffnet, aber wenn Sie die Bearbeitung der Konflikte in einem abgeschlossen und Meld geschlossen haben, öffnet git den nächsten und so weiter, bis alle Zusammenführungskonflikte gelöst sind.
Es ist sinnvoll, ein Dummy-Projekt zu erstellen, um die Verwendung zu testen, git mergetoolbevor Sie es in einem Live- Projekt verwenden. Stellen Sie sicher, dass Sie in Ihrem Test einen Dateinamen verwenden, der ein Leerzeichen enthält, falls Ihr Betriebssystem erfordert, dass Sie die Anführungszeichen in der cmdZeile umgehen, siehe unten.
Anführungszeichen entkommen
Bei einigen Betriebssystemen müssen die Anführungszeichen möglicherweise maskiert sein cmd. Weniger erfahrene Benutzer sollten sich daran erinnern, dass Konfigurationsbefehlszeilen mit Dateinamen getestet werden sollten, die Leerzeichen enthalten. Wenn die cmdZeilen nicht mit den Dateinamen funktionieren, die Leerzeichen enthalten, versuchen Sie, die Anführungszeichen zu umgehen. z.B
cmd = meld \"$LOCAL\" \"$REMOTE\"
In einigen Fällen kann ein komplexeres Anführungszeichen erforderlich sein. Der erste der folgenden Windows-Pfadlinks enthält ein Beispiel für das dreifache Escapezeichen für jedes Zitat. Es ist langweilig, aber manchmal notwendig. z.B
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Windows-Pfade
Windows-Benutzer benötigen wahrscheinlich eine zusätzliche Konfiguration, die den Meldungszeilen hinzugefügt cmdwird. Möglicherweise müssen sie den vollständigen Pfad zu verwenden meldc, der unter Windows über die Befehlszeile aufgerufen werden soll, oder sie benötigen oder möchten möglicherweise einen Wrapper. Sie sollten die lesen Stackoverflow zu verlinkenden Seiten unter denen etwa die richtige Meld Einstellung cmdLinie für Windows. Da ich ein Linux-Benutzer bin, kann ich die verschiedenen Windows- cmdZeilen nicht testen und habe keine weiteren Informationen zu diesem Thema, als zu empfehlen, meine Beispiele mit einem vollständigen Pfad zu Meld oder meldcoder dem Hinzufügen des Meld-Programmordners zu Ihrem zu verwenden path.
Ignorieren von nachgestellten Leerzeichen mit Meld
Meld verfügt über eine Reihe von Einstellungen, die in der GUI konfiguriert werden können.
Auf der Text FiltersRegisterkarte "Einstellungen" gibt es mehrere nützliche Filter, mit denen Sie beispielsweise Kommentare ignorieren können, wenn Sie einen Diff ausführen. Es gibt zwar Filter zum Ignorieren All whitespaceund Leading whitespacees gibt keinen Ignorierfilter Trailing whitespace(dies wurde als Ergänzung in der Meld-Mailingliste vorgeschlagen, ist aber in meiner Version nicht verfügbar).
Das Ignorieren von nachgestellten Leerzeichen ist häufig sehr nützlich, insbesondere bei der Zusammenarbeit, und kann einfach manuell mit einem einfachen regulären Ausdruck auf der Text FiltersRegisterkarte Meld-Einstellungen hinzugefügt werden .
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
Ich hoffe das hilft allen.