137 Stimmen

Git Diff mit Beyond Compare

Es ist mir gelungen, Git dazu zu bringen, Beyond Compare 3 als Vergleichstool zu starten. Wenn ich jedoch einen Vergleich durchführe, wird die Datei, mit der ich vergleiche, nicht geladen. Es wird nur die neueste Version der Datei geladen und sonst nichts, so dass im rechten Fenster von Beyond Compare nichts angezeigt wird.

Ich verwende Git 1.6.3.1 mit Cygwin und Beyond Compare 3. Ich habe Beyond Compare so eingerichtet, wie sie es im Support-Teil ihrer Website mit einem Skript wie diesem vorschlagen:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"path_to_bc3_executable" "$2" "$5" | cat

Ist noch jemand auf dieses Problem gestoßen und kennt eine Lösung dafür?

Edita:
Ich habe die Vorschläge von VonC befolgt, aber ich habe immer noch genau das gleiche Problem wie zuvor. Ich bin ziemlich neu in Git, also vielleicht benutze ich das diff nicht richtig.

Ich versuche zum Beispiel, die Differenz einer Datei mit einem Befehl wie diesem zu sehen:
git diff main.css

Beyond Compare wird dann geöffnet und zeigt im linken Bereich nur meine aktuelle main.css an, im rechten Bereich ist nichts zu sehen. Ich möchte meine aktuelle main.css im linken Fenster mit der HEAD-Datei vergleichen, also mit dem, was ich zuletzt übertragen habe.

Meine git-diff-wrapper.sh sieht wie folgt aus:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"c:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

Meine Git-Konfiguration sieht für Diff so aus:

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh

163voto

yehnan Punkte 5152

Ich verwende keine zusätzlichen Wrapper-.sh-Dateien. Meine Umgebung ist Windows XP, git 1.7.1 auf cygwin und Beyond Compare 3. Nachfolgend ist mein .git/config archivo.

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    #use cygpath to transform cygwin path $LOCAL (something like /tmp/U5VvP1_abc) to windows path, because bc3 is a windows software
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
[merge]
    tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
    #trustExitCode = true
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

Dann verwende ich $ git difftool zu vergleichen und $ git mergetool zu verschmelzen.

Über trustExitCode : Für einen benutzerdefinierten Zusammenführungsbefehl geben Sie an, ob der Exit-Code des Zusammenführungsbefehls verwendet werden kann, um festzustellen, ob die Zusammenführung erfolgreich war. Wenn dies nicht auf true gesetzt ist, wird der Zeitstempel der Zusammenführungs-Zieldatei überprüft, und die Zusammenführung wird als erfolgreich angesehen, wenn die Datei aktualisiert wurde; andernfalls wird der Benutzer aufgefordert, den Erfolg der Zusammenführung anzugeben.

32voto

Nick Josevski Punkte 4016

Dank an @dahlbyk der Autor von Posh-Git für die Veröffentlichung seiner Konfiguration als Gist . Er hat mir geholfen, mein Konfigurationsproblem zu lösen.

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc3
[mergetool]
    prompt = false
    keepBackup = false
[mergetool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true
[alias]
    dt = difftool
    mt = mergetool

23voto

user Punkte 16693

Führen Sie diese Befehle für Beyond Compare 2 aus:

git config --global diff.tool bc2
git config --global difftool.bc2.cmd "\"c:/program files (x86)/beyond compare 2/bc2.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Führen Sie diese Befehle für Beyond Compare 3 aus:

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Dann verwenden Sie git difftool

14voto

Daniel Magnusson Punkte 9281

Offizielle Dokumentation hat für mich funktioniert

11voto

Mit neueren Versionen von Git und Beyond Compare als die, die OP hatte, funktionierte das Folgende bei mir:

  • Git für Windows - v.2.22.0
  • Beyond Compare 4 - v.4.2.10 (64-bit Ausgabe)

Zu bearbeitende Konfig-Datei: %USERPROFILE% \.gitconfig

Ersetzen Sie die Tags diff/difftool und merge/mergetool durch

[diff]
    tool = bc4
[difftool]
    prompt = false
[difftool "bc4"]
    cmd = \"c:/program files/beyond compare 4/bcomp.exe\" "$LOCAL" "$REMOTE"
[merge]
    tool = bc4
[mergetool]
    prompt = false
[mergetool "bc4"]
    trustExitCode = true
    cmd = \"c:/program files/beyond compare 4/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

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