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 .gitconfig
Datei 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 diff
das weiterhin wie gewohnt funktioniert.]
Sie verwenden git difftool
genau 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 $LOCAL
und $REMOTE
in 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 = false
Zeile 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 .gitconfig
Datei 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 mergetool
Sie 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_name
enthä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 .gitconfig
obigen Beispieleintrag werden 2 Zeilen als [mergetool "meld"]
cmd
Zeile vorgeschlagen. Tatsächlich gibt es für fortgeschrittene Benutzer alle Arten von Möglichkeiten, die cmd
Leitung zu konfigurieren , aber das würde den Rahmen dieser Antwort sprengen.
Diese Antwort enthält zwei alternative cmd
Zeilen, 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.
$BASE
ist der Vorfahr des gemeinsam genutzten Commits von $LOCAL
und $REMOTE
, dh die Datei ist so, wie sie war, als der Zweig, der sie enthielt, $REMOTE
ursprü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 $MERGED
oder $BASE
zwischen $LOCAL
und verwendet werden soll $REMOTE
.
In beiden Fällen zeigt Meld 3 Fenster mit $LOCAL
und $REMOTE
im linken und rechten Fenster sowie entweder $MERGED
oder $BASE
im 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. $MERGED
für die Datei, die die teilweise zusammengeführte Datei mit den Zusammenführungskonfliktinformationen enthält, oder $BASE
für den gemeinsam genutzten Commit-Vorfahren von $LOCAL
und $REMOTE
. [Da beide cmd
Zeilen nützlich sein können, behalte ich beide in meiner .gitconfig
Datei. Die meiste Zeit benutze ich die $MERGED
Zeile und die $BASE
Zeile ist auskommentiert, aber das Auskommentieren kann vertauscht werden, wenn ich $BASE
stattdessen die Zeile verwenden möchte .]
Hinweis zur Ausgabedatei: Machen Sie sich keine Sorgen, dass diese verwendet --output "$MERGED"
wird, cmd
unabhängig davon, ob sie früher in der Zeile verwendet wurde $MERGED
oder $BASE
wurde cmd
. Die --output
Option 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 $MERGED
oder $BASE
als 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 .orig
an 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 .orig
Datei 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 unchanged
und fragt dann Was the merge successful? [y/n]
, wenn Sie antworten, n
wird 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 mergetool
bevor 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 cmd
Zeile 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 cmd
Zeilen 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 cmd
wird. 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 cmd
Linie für Windows. Da ich ein Linux-Benutzer bin, kann ich die verschiedenen Windows- cmd
Zeilen nicht testen und habe keine weiteren Informationen zu diesem Thema, als zu empfehlen, meine Beispiele mit einem vollständigen Pfad zu Meld oder meldc
oder 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 Filters
Registerkarte "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 whitespace
und Leading whitespace
es 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 Filters
Registerkarte 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.