Git Diff mit Beyond Compare

111

Es ist mir gelungen, git dazu zu bringen, Beyond Compare 3 als Diff-Tool zu starten. Wenn ich jedoch ein Diff mache, wird die Datei, mit der ich vergleiche, nicht geladen. Es wird nur die neueste Version der Datei geladen und nichts anderes, sodass sich im rechten Bereich von Beyond Compare nichts befindet.

Ich verwende git 1.6.3.1 mit Cygwin mit Beyond Compare 3. Ich habe unvergleichlich eingerichtet, wie sie im Support-Teil ihrer Website mit einem Skript wie dem folgenden 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

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

Bearbeiten:
Ich bin den Vorschlägen von VonC gefolgt, habe aber immer noch genau das gleiche Problem wie zuvor. Ich bin ein bisschen neu bei Git, also benutze ich das Diff vielleicht nicht richtig.

Zum Beispiel versuche ich, das Diff in einer Datei mit einem Befehl wie dem folgenden zu sehen:
git diff main.css

Beyond Compare wird dann geöffnet und zeigt nur meine aktuelle main.css im linken Bereich an. Im rechten Bereich befindet sich nichts. Ich möchte, dass meine aktuelle main.css im linken Bereich im Vergleich zum HEAD angezeigt wird, im Grunde das, was ich zuletzt festgelegt habe.

Meine git-diff-wrapper.sh sieht so 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 folgendermaßen aus:

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

Antworten:

140

Ich verwende keine zusätzlichen .sh-Wrapper-Dateien. Meine Umgebung ist Windows XP, Git 1.7.1 unter Cygwin und Beyond Compare 3. Es folgt meine .git / config- Datei.

[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 zum Vergleichen und $ git mergetool zum Zusammenführen.

Über trustExitCode : Für einen benutzerdefinierten Befehl merge an , ob der Exit - Code des Merge - Befehl verwendet werden kann , um zu bestimmen , ob die Zusammenführung erfolgreich war. Wenn dies nicht auf true gesetzt ist, wird der Zeitstempel der Zusammenführungszieldatei überprüft und die Zusammenführung als erfolgreich angenommen, wenn die Datei aktualisiert wurde. Andernfalls wird der Benutzer aufgefordert, den Erfolg der Zusammenführung anzugeben.

Yehnan
quelle
12
Ich laufe in Windows 7 mit einer Mingw-Git-Shell. Ich musste /c/program filesstattdessen einen Pfad im Linux-Stil verwenden c:/program files. Auch ich habe das entfernt "$(cygpath -w $LOCAL)"und gerade benutzt "$LOCAL". Das schien den Trick zu tun.
Landon Poch
5
Wie @pClass weiter unten erwähnt, ist "bc3" jetzt ein internes Tool in neueren Versionen von git. Sie sollten einen eindeutigen Namen verwenden, z. B. "beyondcompare3"
Scott Wegner,
4
GitHub Shell (unter Windows 8) sagte es mir bcompare: command not found- bis ich den NAMEN des Tools von bc3etwas anderem (wie abc3) änderte . Ich denke, dass einige interne Github-Einstellungen gestört haben. Außerdem habe ich das "$(cygpath -w $LOCAL)"Teil entfernt und durch ersetzt "$LOCAL". Jetzt funktioniert es gut. Vielen Dank!
Felix Alcala
1
Dies war für mich fehlerhaft, als ich den Unterschied zwischen zwei Commits betrachtete. Hier ist eine bessere Lösung: blog.kifaru.be/2011/07/…
balajimc55
2
Ich fand auch diesen Artikel: scootersoftware.com/support.php?zz=kb_vcs
Guy Avraham
28

Vielen Dank an @dahlbyk , den Autor von Posh-Git , für die Veröffentlichung seiner Konfiguration als Kern . Es 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
Nick Josevski
quelle
Ich habe diese Antwort ausprobiert und konnte mich nicht unterscheiden, vielleicht mache ich es falsch.
Epu
1
@Epu Haben Sie bestätigt, dass Ihre Pfade auf Ihrem Computer identisch sind? Und es ist Beyond Compare 3, keine ältere Version 2 oder so?
Nick Josevski
Ich habe bestätigt, dass die Pfade gleich sind und dass es sich um bc3 handelt.
Epu
1
Lustige Sache ist, 'git difftool file.txt' und 'git mergetool file.txt' funktionieren in Ordnung, also habe ich zu diesen gewechselt. Aber 'git diff file.txt' ist jetzt kaputt (bevor es mir das Standard-Konsolendiff zeigte). Jetzt gibt es mir 'Fehler: bc3 kann nicht erzeugt werden: Keine solche Datei oder kein solches Verzeichnis \ nexternal diff ist gestorben und stoppt bei file.txt'
Epu
Nur für den Fall, dass jemand das gleiche Problem hat wie ich (nicht erkannte .gitconfig nach dem Bearbeiten), musste ich den Pfad wie folgt hinzufügen:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez
20

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 benutze git difftool

Benutzer
quelle
1
Wird Beyond Compare 4 unterstützt?
Danijel
2
@Danijel das offizielle Dokument in @Daniel Magnussons Antwort Staaten angegebenNote: Use bc3 on the command line for both BC version 3 and 4
BNT
9

Die offizielle Dokumentation hat bei mir funktioniert

Daniel Magnusson
quelle
Danke Mann, dass du mich auf das offizielle Dokument verwiesen hast !!! Zumindest gibt es an, welche Diff-Konfiguration für GIT vs GitHub benötigt wird
shridutt kothari
6

Hier ist meine Konfigurationsdatei. Es hat ein bisschen Wrestling gekostet, aber jetzt funktioniert es. Ich verwende Windows Server, msysgit und darüber hinaus Vergleich 3 (anscheinend eine x86-Version). Sie werden feststellen, dass ich keine Argumente angeben muss und "Pfad" anstelle von "cmd" verwende.

[user]
        name = PeteW
        email = [email protected]
[diff]
        tool = bc3
[difftool]
        prompt = false
[difftool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
[merge]
        tool = bc3
[mergetool]
        prompt = false
        keepBackup = false
[mergetool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
        trustExitCode = true
[alias]
        dt = difftool
        mt = mergetool
Nachonachoman
quelle
4

Die Support-Seite von Beyond Compare ist etwas kurz.

Überprüfen Sie meine diff.externe Antwort für mehr (bezüglich der genauen Syntax)

Extrakt:

$ git config --global diff.external <path_to_wrapper_script>

an der Eingabeaufforderung durch den Pfad zu " git-diff-wrapper.sh" ersetzen , damit Ihr ~/.gitconfigenthält

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

Stellen Sie sicher, dass Sie die richtige Syntax verwenden, um die Pfade zum Wrapper-Skript und zum Diff-Tool anzugeben, dh verwenden Sie Schrägstriche anstelle von Schrägstrichen. In meinem Fall habe ich

[diff]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh

in .gitconfigund

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

im Wrapper-Skript.


Hinweis: Sie können auch verwenden git difftool.

VonC
quelle
3

Bitte beachten Sie, dass Sie einen falschen Weg von 2 US-Dollar eingeschlagen haben. Da Sie sich unter Cygwin befinden, BC3 jedoch nicht, sollten Sie einen vollständigen Pfad dafür angeben. wie "d: / cygwin $ 2"

Bitte beziehen Sie meine git-diff-wrapper.sh hier:

$ cat ~/git-diff-wrapper.sh
#!/bin/sh
echo $2
echo $5
/cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "d:/programs/cygwin$2" "$5"

Viel Glück.

z33
quelle
3
Sie sollten wirklich Cygpath dafür verwenden; zB bcompare.exe $(cygpath -w $2). Prost.
Dan Moulding
3

Wenn Sie Windows 7 (Professional) und Git für Windows (Version 2.15 oder höher) ausführen, können Sie einfach den folgenden Befehl ausführen, um herauszufinden, welche verschiedenen Diff-Tools von Ihrem Git für Windows unterstützt werden

git difftool --tool-help

Sie sehen eine ähnliche Ausgabe

git difftool --tool = 'kann auf einen der folgenden
Werte gesetzt werden : vimdiff vimdiff2 vimdiff3

Es bedeutet, dass Ihr Git derzeit kein unvergleichliches Difftool unterstützt (nicht finden kann).

Damit Git unvergleichbar als gültige difftool zu finden, sollten Sie darüber hinaus Installationsverzeichnis vergleichen in Ihrem System Pfadumgebungsvariable. Sie können dies überprüfen, indem Sie bcompare über die Shell ausführen (cmd, git bash oder Powershell. Ich verwende Git Bash). Wenn Beyond Compare nicht gestartet wird, fügen Sie das Installationsverzeichnis (in meinem Fall C: \ Programme \ Beyond Compare 4) zu Ihrer Systempfadvariablen hinzu. Starten Sie danach Ihre Shell neu. Git zeigt Beyond Compare als mögliche Difftool-Option an. Sie können einen der folgenden Befehle verwenden, um über den Vergleich hinaus als Difftool zu starten (z. B. um eine lokale Datei mit einem anderen Zweig zu vergleichen).

git difftool -t bc branchnametocomparewith -- path-to-file
or 
git difftool --tool=bc branchnametocomparewith -- path-to-file

Sie können unvergleichlich als Standard-Difftool konfigurieren, indem Sie die folgenden Befehle verwenden

   git config --global diff.tool bc

ps Denken Sie daran, dass bc im obigen Befehl bc3 oder bc sein kann, je nachdem, was Git aus Ihrer Pfadsystemvariablen finden konnte.

sarabdeep singh
quelle
2

Update für BC4 64bit: Dies funktioniert für Git für Windows v.2.16.2 und darüber hinaus Compare 4 - v.4.2.4 (64bit Edition)

Ich habe die .gitconfig-Datei in meinem Benutzerstamm "C: \ Users \ MyUserName" manuell bearbeitet und die Tags diff / difftool und merge / mergetool durch ersetzt

[diff]
  tool = bc
[difftool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[difftool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[difftool]
  prompt = false
[merge]
  tool = bc
[mergetool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[mergetool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"
Mitaka
quelle
1

Der Unterschied besteht in der aufgerufenen Exe: Richten Sie sie so ein, dass sie bcomp.exe aufruft, und es funktioniert einwandfrei. Wenn Sie Ihre Umgebung so konfigurieren, dass sie bcompare.exe aufruft, ist die Seite des Vergleichs aus Ihrem Revisionssystem leer.

Rrozema
quelle
1

Führen Sie diese Befehle für Beyond Compare 3 aus (wenn sich der Pfad BCompare.exe in Ihrem System unterscheidet, ersetzen Sie ihn bitte gemäß Ihrem):

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

Dann benutze git difftool

Jerry Z.
quelle
1

Windows 10, Git v2.13.2

Meine .gitconfig. Denken Sie daran, ein Escape-Zeichen für '\' und '"' hinzuzufügen.

[diff]
    tool = bc4
[difftool]
    prompt = false
[difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc4
[mergetool "bc4"]
    path = C:\\Program Files\\Beyond Compare 4\\BCompare.exe

Sie können die unvergleichliche Einrichtung als Difftool für die Verwendung von Git-Befehlen zum Konfigurieren verwenden.

zhangyu12
quelle
Hallo, ich hatte ein ähnliches Skript und es schlug fehl, bis ich zu C: \\ Programme \\ Beyond Compare 4 \\ BComp.exe wechselte. Mit BCompare.exe wurde die temporäre Datei gelöscht, bevor sie verglichen werden konnte, sodass ich nur die neueste Datei sah, keine eingecheckte Version.
Gabriel
0

Aus irgendeinem Grund wurde für mich die von git diff erstellte tmp-Datei gelöscht, bevor sie unvergleichlich geöffnet wurde. Ich musste es zuerst an einen anderen Ort kopieren.

cp -r $2 "/cygdrive/c/temp$2"
cygstart /cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "C:/temp$2" "$5"
Dustin
quelle
0

Für MAC hat es nach vielen Recherchen bei mir funktioniert ..! 1. Installieren Sie das Beyond Compare und dieses wird an der folgenden Stelle installiert

/ Applications / Beyond \ Compare.app/Contents/MacOS/bcomp

Befolgen Sie diese Schritte, um bc als Diff / Merge-Tool in git http://www.scootersoftware.com/support.php?zz=kb_mac zu erstellen

Sreedhar GS
quelle
0

Für Git Version 2.15.1.windows.2 mit BC2.exe.

Die Konfiguration unten funktioniert endlich auf meinem Computer.

[difftool "bc2"] cmd = \"c:/program files/beyond compare 2/bc2.exe\" ${LOCAL} ${REMOTE}

YChi Lu
quelle