Ich versuche, WinMerge mit Git zu integrieren, wie ich es unter Windows 7 Ultimate gesehen habe.
Ich habe die folgenden Schritte befolgt, aber ein Fehler wird weiterhin angezeigt, wenn ich ein git mergetool mit vimdiff verwende.
Erstellt eine Datei mit dem Namen winmerge.sh im Stammverzeichnis von git: C/Programme (x86)/Git/mit: WinMergeU ist der korrekte Speicherort.
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files (x86)/WinMerge/WinMergeU.exe"
git /e /u /dl "Base" /dr "Mine" "$1" "$2"
und benutzte die folgenden Befehle.
git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.Prompt false
Der Fehler wird angezeigt als:
git config option merge.tool set to unknown tool: winmerge
Sie sprechen von merge-Tool, aber Sie (und einige andere Personen mit Antworten) konfigurieren es als diff-Tool.
Um ein Zusammenführungswerkzeug zu konfigurieren, müssen Sie anstelle von merge.tool
und mergetool
diff.tool
- und difftool
-Konfigurationen verwenden.
git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.Prompt false
Und dann kannst du verwenden
git mergetool
dadurch werden die beiden zu bearbeitenden Dateien geöffnet.
Ein Kudos für @dvdvck, der in den Kommentaren erwähnt, dass in Befehlszeilenparameter Sie eine dritte Datei für die Ergebnisdatei für winmerge (Parameter Ausgabepfad) angeben können.
Der Vollständigkeit halber möchte ich noch erwähnen, dass es auch this Gist gibt, das auf die vollständige Konfiguration von winmerge sowohl als Diff als auch als Merge-Tool abzielt.
Git 2.5+ (Q2 2015) enthält Winmerge als bekannten git mergetool
!
Wenn sich Winmerge in Ihrem %PATH%
befindet, brauchen Sie nur noch einen git config merge.tool winmerge
!
(Funktioniert auch für das diff-Tool: git config diff.tool winmerge
)
Siehe commit 3e4f237 von David Aguilar (davvid
) , 20. Mai 2015.
(Zusammengeführt von Junio C Hamano - gitster
- in commit 324a9f4 , 01 Jun 2015)
Geholfen hat: Philip Oakley (PhilipOakley
) , Johannes Schindelin (dscho
) , Sebastian Schuberth (sschuberth
) , SZEDER Gábor (szeder
)
Die gesamte Konfiguration wird nun für Sie direkt in Git erledigt, mit mergetools/winmerge
:
"$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
"$merge_tool_path" -u -e -dl Local -dr Remote "$LOCAL" "$REMOTE" "$MERGED"
mergetools
: Füge winmerge als eingebautes Werkzeug hinzuFügen Sie ein winmerge-Scriptlet mit den Befehlen hinzu, die in diesem Thread beschrieben sind, also dass Benutzer winmerge verwenden können, ohne dass .__ ausgeführt werden muss. zusätzliche Konfiguration.
Wenn Sie sich für SourceTree (oder für alle Google-Suchenden mit SourceTree) entscheiden, können Sie WinMerge für das Merge-Tool verwenden, indem Sie das Merge-Tool auf custom setzen und den Diff-Befehl auf WinMergeU.exe zeigen.
C:\Program Files (x86)\WinMerge\WinMergeU.exe
In Argumenten verwenden Sie:
-e -u -dl "Mine" -wr -dr "Theirs" $LOCAL $REMOTE $MERGED
Dies hat zur Folge, dass die linke Seite (mit der Bezeichnung "Mine") bearbeitet werden kann, und es wird die Ausgabedatei sein, wenn Sie in WinMerge speichern. Die rechte Seite (mit der Bezeichnung "Theirs") ist schreibgeschützt (das ist das Argument -wr). Dies ist erforderlich, da WinMerge alle gespeicherten Dateien in die $ MERGED-Datei ausgibt. Wenn also beide Seiten bearbeitet wurden, würde sie die linke Seite ausgeben überschreibe das mit der rechten Seite; Am besten vermeiden Sie diese Art von Verwirrung.
Wenn Sie die Option für die Sicherungsdatei aktiviert lassen, generiert WinMerge eine .bak-Datei. Der Inhalt dieser Datei ist entweder die Originaldatei der linken Seite oder die vorletzte Ausgabedatei, wenn Sie mehrmals gespeichert haben. Sie können dies entweder deaktivieren oder * .bak zu Ihrer .gitignore-Datei hinzufügen.
Git selbst erstellt eine * .orig-Konfliktdatei, NACHDEM der Konflikt gelöst ist, nur für den Fall, dass Sie ihn missbraucht haben. Sie können * .orig erneut zu Ihrer .gitignore-Datei hinzufügen oder diese Funktion deaktivieren. Leider verfügt SourceTree nicht über eine GUI-Option. Starten Sie Ihre Git-Bas oder, wenn Sie sich während der Installation für die richtige PATH-Option entschieden haben, die Windows-Eingabeaufforderung.
git config --global mergetool.keepBackup false
Dadurch wird Git die * .orig-Dateien erstellen. Sie können die Konfigurationsdatei auch direkt bearbeiten, indem Sie die .gitconfig-Datei im Stammverzeichnis Ihres Benutzerverzeichnisses suchen. Wenn Sie wissen, wie VIM verwendet wird, können Sie das Ganze mit diesem Befehl bearbeiten:
git config --global --edit
Hier ist meins (in %userprofile%\.gitconfig
oder ~/.gitconfig
auf * nix), kein Wrapper (Win 7 Home Pro):
[diff]
tool = winmerge
[difftool "winmerge"]
cmd = c:/path/to/winmergeu.exe -e -u -x -wl -wr -dl "base" -dr "mine" \"$LOCAL\" \"$REMOTE\"
Das ist einfacher zu tun und hat für mich funktioniert:
git config --global diff.tool winmerge
git config --replace --global difftool.winmerge.cmd "\"C:\path to winmerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"
git config --global difftool.Prompt false
Ihr Pfad ist falsch, es sollte "/c/Program Files (x86)/WinMerge/WinMergeU.exe"
sein.
Sie arbeiten in einer Shell-Skriptumgebung und nicht in der systemeigenen Eingabeaufforderung von Windows.
So führen Sie WinMerge als Vergleichs- und Zusammenführungswerkzeug für das Git-Plugin von Visual Studio 2017 aus:
Vom Windows-Befehl Eingabeaufforderung: Geben Sie >> git config --global --edit Ein. Dadurch wird die .getconfig-Datei zum Bearbeiten geöffnet.
Bitte aktualisieren Sie mit dem folgenden Befehl:
[mergetool]
Prompt = false
keepBackup = false
keepTemporaries = false
[merge]
tool = winmerge
[mergetool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[diff]
tool = winmerge
[difftool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -u -e $LOCAL $REMOTE
Nachdem ich mich über eine Stunde lang damit beschäftigt hatte, installierte ich tortoisegit und bis jetzt gibt es mir genau das, was ich will.
Die Einstellungen von Winmerge für Tortoise git werden in http://thoai-nguyen.blogspot.com.au/2012/03/setup-tortoise-git-and-winmerge.html beschrieben.
Die Eingabe der Einstellungen über die Befehlszeile wurde durch andere Antworten abgedeckt. Das .gitconfig
-Datei für die vollständige 3-Wege-Zusammenführung mit WinMerge könnte folgendermaßen konfiguriert werden (dieses Beispiel stammt von Windows):
[merge]
tool = WinMerge
[mergetool "WinMerge"]
cmd = \"C:\\Program Files\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Local\" -dm \"Base\" -dr \"Remote\" \"$LOCAL\" \"$BASE\" \"$REMOTE\" -o \"$MERGED\"
trustExitCode = true
keepBackup = false
[diff]
tool = WinMerge
[difftool "WinMerge"]
cmd = \"C:\\Program Files\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Old $BASE\" -dr \"New $BASE\" \"$LOCAL\" \"$REMOTE\"
trustExitCode = true
Informationen zur Flagge:
trustExitCode = true
weist git an, die Ausgabe ohne weitere Eingabeaufforderung zu akzeptieren.
keepBackup = false
löscht automatisch das automatisch generierte *.orig
Dateien.
Hinweis: Die Variablen $ BASE und $ MERGE enthalten bei Verwendung von difftool einfach den Dateinamen.
Ursprünglich habe ich @ CapinWinkys Antwort für die Verwendung von WinMerge von SourceTree positiv bewertet. Diese Antwort ist immer noch gültig, aber WinMerge unterstützt jetzt auch eine Drei-Wege-Zusammenführung, für die zusätzliche Parameter erforderlich sind.
Im Dialogfeld "SourceTree-Optionen" habe ich "Benutzerdefiniert" als Zusammenführungswerkzeug ausgewählt und den Befehl wie folgt eingegeben:
C:\Program Files\WinMerge\WinMergeU.exe
und die Argumente als:
-u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
Es scheint nicht mehr notwendig zu sein, die Parameter remote/local/base in Anführungszeichen zu setzen, um Pfade mit Leerzeichen zu berücksichtigen.
Diese Konfiguration dient zur Verwendung des mittleren Bereichs als zusammengeführte Ausgabedatei.
Ich hatte das Problem, dass sich WinMerge beim Zusammenführen nicht öffnen ließ. Sourcetree startet Git, um das Tool Ihrer Wahl zu öffnen. Wenn Sie die benutzerdefinierte Option von Sourcetree verwenden, wird Ihre Git-Konfigurationsdatei (z. B. C:\Users\Me\.gitconfig) geändert, um ein neues Merge-Tool namens "sourcetree" hinzuzufügen, und der Git-Befehl enthält --tool=sourcetree
. Irgendwann war die .gitconfig-Datei nicht mehr korrekt aktualisiert worden und ich hatte zwei 'cmd'-Zeilen in diesem Abschnitt, von denen eine unterbrochen war:
[mergetool "sourcetree"]
cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' -u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
trustExitCode = true
cmd = 'C:/Program '
Durch manuelles Reparieren der .gitconfig-Datei wurde das Problem behoben.
Beispiel:
git config --global --add diff.tool winmerge
git config --replace --global difftool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"
git config --global difftool.Prompt false