2010-01-15 5 views
90

Es ist mir gelungen, git zu starten Beyond Compare 3 als ein Diff-Tool, aber wenn ich ein diff mache, wird die Datei, gegen die ich vergleiche, nicht geladen. Es wird nur die neueste Version der Datei geladen und sonst nichts, also befindet sich nichts im rechten Bereich von Beyond Compare.Git Diff mit Beyond Vergleichen

Ich verwende Git 1.6.3.1 mit Cygwin mit Beyond Compare 3. Ich eingerichtet haben darüber hinaus vergleichen, wie sie im Trägerteil ihrer Website mit einem Skript wie solche 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 sonst noch jemand ist auf dieses Problem gestoßen und kennt eine Lösung dafür?

Edit:
Ich habe die Vorschläge von VonC gefolgt, aber ich habe immer noch genau das gleiche Problem wie zuvor. Ich bin ein bisschen neu in Git, vielleicht benutze ich den Diff nicht richtig.

Zum Beispiel, Ich versuche, die diff auf eine Datei mit einem Befehl wie so zu sehen:
git diff main.css

Darüber hinaus wird geöffnet vergleichen und meine aktuellen main.css nur in der linken Anzeige Im rechten Fensterbereich befindet sich nichts. Ich hätte gerne meine aktuelle main.css im linken Bereich im Vergleich zum HEAD, im Grunde was ich zuletzt begangen habe.

Mein 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 Config, wie dies für Diff aussieht:

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

Antwort

116

Ich verwende keine extra Wrapper-SH-Dateien. Meine Umgebung ist Windows XP, git 1.7.1 auf 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 benutze ich $ git difftool zu vergleichen und $ git mergetool zu verschmelzen.

über trustExitCode: Für einen benutzerdefinierten Befehl merge an, ob der Exit-Code des Merge-Befehls 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 wird als erfolgreich angesehen, wenn die Datei aktualisiert wurde. Andernfalls wird der Benutzer aufgefordert, den Erfolg der Zusammenführung anzugeben.

+0

+1 Danke, arbeitet für mich auf W7 x64, Cygwin, Git 1.7.6.msysgit. Ich musste den Kurs natürlich anpassen. – johnny

+0

@yehnan - Was ist der zweite "$ MERGED" für am Ende der Merge-Befehlszeile? –

+10

Ich renne in Windows 7 mit einem Mingw Git Shell. Ich musste einen Linux-Pfad '/ c/program files' anstelle von' c:/program files' verwenden. Außerdem habe ich das '" $ (cygpath -w $ LOCAL) "' entfernt und einfach "$ LOCAL" 'verwendet. Das schien den Trick zu machen. –

4

Die Beyond Compare support page ist ein bisschen kurz.

mein Überprüfen diff.external answer für mehr (in Bezug auf die genaue Syntax)

Extract:

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

at the command prompt, replacing with the path to " git-diff-wrapper.sh ", so your ~/.gitconfig contains

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

Be sure to use the correct syntax to specify the paths to the wrapper script and diff tool, i.e. use forward slashed instead of backslashes. In my case, I have

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

in .gitconfig and

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

in the wrapper script.


Hinweis: Sie auch git difftool verwenden können.

3

Bitte beachten Sie, dass Sie einen falschen Pfad von $ 2 machen. weil Sie unter Cygwin sind, aber BC3 nicht, also sollten Sie einen vollständigen Pfad dafür angeben. wie "d:/Cygwin $ 2" my git-diff-wrapper.sh

hier verweisen:

$ 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.

+2

Sie sollten wirklich cygpath für diesen Einsatz; z.B. 'bcompare.exe $ (cypath -w $ 2)'. Prost. –

0

Aus irgendeinem Grund wurde für mich die von git diff erstellte tmp-Datei gelöscht, bevor sie 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" 
17

Führen Sie diese Befehle für Beyond 2 Vergleichen:

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 3 Vergleichen:

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

+5

Wenn diese Befehle in git bash ausgeführt wird, entkommen die $ mit \ –

27

Danke an @dahlbyk, der Autor von Posh-Git, für die Veröffentlichung seiner config as a gist. Es half mir, 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 
+0

ich diese Antwort versucht und war zu diff nicht in der Lage, ich vielleicht mache es falsch. – Epu

+1

@Epu haben Sie bestätigt, dass die Pfade auf Ihrem Computer identisch sind? Und es ist Beyond Compare 3, kein älteres v2 oder sowas? –

+0

Ich habe bestätigt, dass die Pfade gleich sind und dass es sich um bc3 handelt. – Epu

7

Official documentation für mich gearbeitet

+0

Vielen Dank, dass Sie mich auf das offizielle Dokument verwiesen haben !!! zumindest gibt es an, welche diff config für GIT vs GitHub benötigt –

5

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

[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 
+0

Git diffdool hat für mich funktioniert, aber mergetool funktioniert nicht für mich. –

4

es sieht aus wie BC3 unterstützt nur 3-Wege-Merge für PRO Edition.

0

Der Unterschied ist in der exe aufgerufen wird: Richten Sie es auf bcomp.exe aufrufen und es wird gut funktionieren. Konfigurieren Sie Ihre Umgebung so, dass bcompare.exe aufgerufen wird, und Sie erhalten die Seite des Vergleichs, die aus dem leeren Revisions-System stammt.

1

Run diese Befehle für Beyond 3 Vergleichen (wenn der BCompare.exe Pfad in Ihrem System anders ist, ersetzen Sie es bitte nach Ihnen):

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

0

Für MAC verwenden, nachdem tun viel Forschung hat es für mich gearbeitet ..! 1.Installieren Sie die unvergleichbar und dies wird installiert in unten Standort

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

Bitte befolgen Sie diese Schritte bc als diff/Merge-Tool in git http://www.scootersoftware.com/support.php?zz=kb_mac

0

Für git Version 2.15.1.windows.2 mit BC2 zu machen .exe.

Die Konfiguration unten funktioniert schließlich auf meinem Rechner.

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