383 Stimmen

Git unter Windows: Wie richtet man ein Mergetool ein?

Ich habe msysGit und Git unter Cygwin ausprobiert. Beide funktionieren an und für sich ganz gut und beide führen gitk und git-gui perfekt aus.

Wie zum Teufel konfiguriere ich nun ein Mergetool? (Vimdiff funktioniert unter Cygwin, aber ich hätte gerne etwas, das etwas benutzerfreundlicher ist für einige unserer Windows-liebenden Mitarbeiter).

343voto

Milan Gardian Punkte 11126

Um auf die Antwort von Charles Bailey einzugehen, hier ist mein Git-Setup, das Folgendes verwendet p4merge (freies plattformübergreifendes 3-Wege-Merge-Tool); getestet auf einer msys Git (Windows)-Installation:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

oder, von einer Windows cmd.exe-Shell aus, wird die zweite Zeile zu :

git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""

Die Änderungen (im Vergleich zu Charles Bailey):

  • zur globalen Git-Konfiguration hinzugefügt, d.h. gültig für alle Git-Projekte, nicht nur für das aktuelle Projekt
  • der Wert für die benutzerdefinierte Werkzeugkonfiguration befindet sich in "mergetool.[tool].cmd", nicht in "merge.[tool].cmd" (ich Dummerchen habe eine Stunde damit verbracht, herauszufinden, warum sich Git ständig über ein nicht vorhandenes Werkzeug beschwert)
  • doppelte Anführungszeichen für alle Dateinamen hinzugefügt, so dass Dateien mit Leerzeichen immer noch vom Merge-Tool gefunden werden können (ich habe dies in msys Git über Powershell getestet)
  • Beachten Sie, dass Perforce standardmäßig sein Installationsverzeichnis zu PATH hinzufügt, so dass es nicht notwendig ist, den vollständigen Pfad zu p4merge in dem Befehl anzugeben

Herunterladen: http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools


EDIT (Feb 2014)

Wie von @Gregory Pakosz neueste msys git jetzt "nativ" unterstützt p4merge (getestet an 1.8.5.2.msysgit.0 ).

Sie können die Liste der unterstützten Tools anzeigen, indem Sie den Befehl ausführen:

git mergetool --tool-help

Sie sollten sehen p4merge entweder in verfügbar o gültig Liste. Falls nicht, aktualisieren Sie bitte Ihr Git.

Si p4merge wurde aufgeführt als verfügbar ist es in Ihrem PATH und Sie müssen nur noch die zusammenführen.werkzeug :

git config --global merge.tool p4merge

Wenn es aufgeführt war als gültig müssen Sie definieren mergetool.p4merge.pfad zusätzlich zu zusammenführen.werkzeug :

git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
  • Der obige Pfad ist ein Beispiel, wenn p4merge für den aktuellen Benutzer installiert wurde, nicht systemweit (benötigt keine Admin-Rechte oder UAC-Erhöhung)
  • Obwohl ~ sollte zum Heimatverzeichnis des aktuellen Benutzers expandieren (theoretisch sollte der Pfad also lauten ~/AppData/Local/Perforce/p4merge.exe ), dies hat bei mir nicht funktioniert
  • Noch besser wäre es gewesen, eine Umgebungsvariable zu nutzen (z. B. $LOCALAPPDATA/Perforce/p4merge.exe ), scheint Git keine Umgebungsvariablen für Pfade zu erweitern (wenn Sie wissen, wie man das zum Laufen bringt, lassen Sie es mich bitte wissen oder aktualisieren Sie diese Antwort)

91voto

daizuozhuo Punkte 1687

Die Einstellung mergetool.p4merge.cmd wird nicht mehr funktionieren, da Git begonnen hat, p4merge zu unterstützen, siehe libexec/git-core/git-mergetool--lib.so müssen wir nur den mergetool Pfad für Git angeben, zum Beispiel p4merge:

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

Dann wird es funktionieren.

65voto

Dɑvïd Punkte 1889

Ich verwende Portable Git unter WinXP (funktioniert hervorragend!) und musste einen Konflikt lösen, der beim Branching auftrat. Von allen Gui's, die ich geprüft habe, KDiff3 erwies sich als die transparenteste Lösung.

Aber ich fand die Anweisungen, die ich brauchte, um es unter Windows zum Laufen zu bringen, in dieser Blogbeitrag Die Anweisungen unterscheiden sich geringfügig von den anderen hier aufgeführten Ansätzen. Im Grunde lief es darauf hinaus, dass ich diese Zeilen zu meinem .gitconfig Datei:

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

Funktioniert jetzt einwandfrei!

20voto

splicer Punkte 5244

Unter Cygwin wird die nur Was bei mir funktioniert hat, ist Folgendes:

git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'

Außerdem schalte ich die Eingabeaufforderung für difftool gerne aus:

git config --global difftool.prompt false

19voto

CB Bailey Punkte 693084

git mergetool ist vollständig konfigurierbar, so dass Sie so ziemlich Ihr Lieblingswerkzeug wählen können.

Die vollständige Dokumentation finden Sie hier: http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html

Kurz gesagt, Sie können ein Standard-Mergetool festlegen, indem Sie die Benutzerkonfigurationsvariable merge.tool .

Wenn das Verschmelzungswerkzeug eines der nativ unterstützten Werkzeuge ist, müssen Sie nur die mergetool.<tool>.path auf den vollständigen Pfad zum Werkzeug (ersetzen Sie <tool> durch das, was Sie konfiguriert haben merge.tool zu sein.

Andernfalls können Sie die mergetool.<tool>.cmd zu einem Stück Shell, das zur Laufzeit mit den Shell-Variablen ausgewertet wird $BASE, $LOCAL, $REMOTE, $MERGED auf die entsprechenden Dateien gesetzt. Sie müssen ein bisschen vorsichtig mit dem Escaping sein, egal ob Sie eine Konfigurationsdatei direkt bearbeiten oder die Variable mit der Option git config Befehl.

So etwas sollte einen Eindruck davon vermitteln, was Sie tun können ("mymerge" ist ein fiktives Werkzeug).

git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'

Sobald Sie Ihr bevorzugtes Zusammenführungswerkzeug eingerichtet haben, müssen Sie nur noch folgende Schritte ausführen git mergetool wenn Sie Konflikte zu lösen haben.

Das p4merge Tool von Perforce ist ein ziemlich gutes eigenständiges Merge-Tool.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X