Git Diff con Beyond Compare


111

Sono riuscito a far sì che git avvii Beyond Compare 3 come strumento diff, tuttavia, quando eseguo un diff, il file con cui sto confrontando non viene caricato. Viene caricata solo l'ultima versione del file e nient'altro, quindi non c'è nulla nel riquadro destro di Beyond Compare.

Sto eseguendo git 1.6.3.1 con Cygwin con Beyond Compare 3. Ho impostato oltre il confronto come suggeriscono nella parte di supporto del loro sito Web con uno script come questo:

#!/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

Qualcun altro ha riscontrato questo problema e conosce una soluzione?

Modifica:
ho seguito i suggerimenti di VonC ma ho ancora esattamente lo stesso problema di prima. Sono un po 'nuovo su Git quindi forse non sto usando correttamente il diff.

Ad esempio, sto cercando di vedere il diff su un file con un comando come questo:
git diff main.css

Beyond Compare si aprirà e visualizzerà solo il mio main.css corrente nel riquadro di sinistra, non c'è nulla nel riquadro di destra. Vorrei vedere il mio main.css corrente nel riquadro di sinistra rispetto a HEAD, in pratica quello che ho commesso per ultimo.

Il mio git-diff-wrapper.sh ha questo aspetto:

#!/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

La mia configurazione git è simile a questa per Diff:

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

Risposte:


140

Non uso file wrapper .sh extra. Il mio ambiente è Windows XP, git 1.7.1 su cygwin e Beyond Compare 3. Di seguito è riportato il mio file .git / config .

[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"

Quindi, utilizzo $ git difftool per confrontare e $ git mergetool per unire.

Informazioni su trustExitCode : per un comando di unione personalizzato, specificare se il codice di uscita del comando di unione può essere utilizzato per determinare se l'unione ha avuto esito positivo. Se non è impostato su true, viene verificato il timestamp del file di destinazione dell'unione e si presume che l'unione abbia avuto esito positivo se il file è stato aggiornato, altrimenti all'utente viene chiesto di indicare il successo dell'unione.


12
Sto funzionando in Windows 7 con una shell git mingw. Ho dovuto usare un percorso in stile Linux /c/program filesinvece di c:/program files. Inoltre ho rimosso "$(cygpath -w $LOCAL)"e appena usato "$LOCAL". Quello sembrava fare il trucco.
Landon Poch

5
Come menzionato di seguito da @pClass, "bc3" è ora uno strumento interno nelle versioni più recenti di git. Dovresti usare un nome univoco, come "beyondcompare3"
Scott Wegner

4
GitHub Shell (su Windows 8) mi ha detto bcompare: command not found- finché non ho cambiato il NOME dello strumento da bc3a qualcos'altro (come abc3). Immagino che alcune impostazioni interne di Github abbiano interferito. Inoltre, ho rimosso la "$(cygpath -w $LOCAL)"parte e l'ho sostituita con "$LOCAL". Ora funziona bene. Grazie!
Felix Alcala

1
Questo è stato un bug per me quando ho guardato il diff tra due commit. Ecco una soluzione migliore: blog.kifaru.be/2011/07/…
balajimc55

2
Ho anche trovato questo articolo: scootersoftware.com/support.php?zz=kb_vcs
Guy Avraham

28

Grazie a @dahlbyk , l'autore di Posh-Git , per aver pubblicato la sua configurazione come sintesi . Mi ha aiutato a risolvere il mio problema di configurazione.

[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

Ho provato questa risposta e non sono riuscito a diff, forse sto sbagliando.
Epu

1
@Epu hai confermato che i tuoi percorsi sono gli stessi sulla tua macchina? Ed è Beyond Compare 3, non un vecchio v2 o qualcosa del genere?
Nick Josevski

Ho confermato che i percorsi sono gli stessi e che è bc3.
Epu

1
La cosa divertente è che "git difftool file.txt" e "git mergetool file.txt" funzionano bene, quindi sono passato a quelli. Ma 'git diff file.txt' è ora rotto (prima mi mostrava il diff della console predefinito). Ora mi dà 'errore: impossibile generare bc3: nessun file o directory di questo tipo \ nexternal diff è morto, fermandosi su file.txt'
Epu

Nel caso qualcuno dovesse affrontare lo stesso problema che ho fatto io (.gitconfig non riconosciuto dopo averlo modificato), ho dovuto aggiungere il percorso come segue:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez

20

Esegui questi comandi per Beyond Compare 2:

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

Esegui questi comandi per Beyond Compare 3:

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

Quindi usa git difftool


1
Beyond Compare 4 è supportato?
Danijel

2
@Danijel il documento ufficiale dichiarato nella risposta di @Daniel Magnussons affermaNote: Use bc3 on the command line for both BC version 3 and 4
BNT


6

Ecco il mio file di configurazione. Ci è voluto un po 'di wrestling ma ora funziona. Sto usando Windows Server, msysgit e oltre 3 (apparentemente una versione x86). Noterai che non ho bisogno di specificare alcun argomento e utilizzo "path" invece di "cmd".

[user]
        name = PeteW
        email = petew@petew.com
[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

4

La pagina di supporto di Beyond Compare è un po 'breve.

Controlla la mia risposta esterna diff. Per ulteriori informazioni (per quanto riguarda la sintassi esatta)

Estratto:

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

al prompt dei comandi, sostituendo con il percorso di " git-diff-wrapper.sh", quindi il tuo ~/.gitconfigcontiene

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

Assicurati di usare la sintassi corretta per specificare i percorsi dello script wrapper e dello strumento diff, ad esempio usa la barra in avanti invece delle barre rovesciate. Nel mio caso, l'ho fatto

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

in .gitconfige

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

nello script wrapper.


Nota: puoi anche usare git difftool.



3

Si prega di notare che si effettua un percorso sbagliato di $ 2. perché sei sotto Cygwin ma BC3 no, quindi dovresti specificare un percorso completo per esso. come "d: / cygwin $ 2"

Si prega di fare riferimento al mio git-diff-wrapper.sh qui:

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

In bocca al lupo.


3
Dovresti davvero usare cygpath per questo; ad es bcompare.exe $(cygpath -w $2). Saluti.
Dan Moulding,

3

Se stai utilizzando Windows 7 (professionale) e Git per Windows (v 2.15 o superiore), puoi semplicemente eseguire il comando di seguito per scoprire quali sono i diversi strumenti di diff supportati dal tuo Git per Windows

git difftool --tool-help

Vedrai un output simile a questo

git difftool --tool = 'può essere impostato su uno dei seguenti:
vimdiff vimdiff2 vimdiff3

significa che il tuo git non supporta (non può trovare) oltre il confronto come difftool in questo momento.

Affinché Git possa trovare oltre il confronto come difftool valido, dovresti avere Beyond Compare directory di installazione nella variabile d'ambiente del percorso di sistema . Puoi verificarlo eseguendo bcompare dalla shell (cmd, git bash o powershell. Sto usando Git Bash). Se Beyond Compare non si avvia, aggiungi la sua directory di installazione (nel mio caso, C: \ Program Files \ Beyond Compare 4) alla variabile del percorso di sistema. Dopodiché, riavvia la shell. Git mostrerà Beyond Compare come possibile opzione difftool. È possibile utilizzare uno qualsiasi dei seguenti comandi per avviare oltre il confronto come difftool (ad esempio, per confrontare qualsiasi file locale con qualche altro ramo)

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

È possibile configurare oltre il confronto come difftool predefinito utilizzando i comandi seguenti

   git config --global diff.tool bc

ps tieni presente che bc nel comando precedente può essere bc3 o bc in base a ciò che Git è stato in grado di trovare dalla variabile di sistema del percorso.


2

Aggiornamento per BC4 64 bit: funziona per Git per Windows v.2.16.2 e Beyond Compare 4 - v.4.2.4 (edizione 64 bit)

Ho modificato manualmente il file .gitconfig che si trova nella mia root utente "C: \ Users \ MyUserName" e ho sostituito i tag diff / difftool e merge / mergetool con

[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\"


1

La differenza è nell'exe che viene chiamato: impostalo per chiamare bcomp.exe e funzionerà bene. Configura il tuo ambiente per chiamare bcompare.exe e ti ritroverai con il lato del confronto preso dal tuo sistema di revisione vuoto.


1

Esegui questi comandi per Beyond Compare 3 (se il percorso BCompare.exe è diverso nel tuo sistema, sostituiscilo in base al tuo):

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

Quindi usa git difftool


1

Windows 10, Git v2.13.2

Il mio .gitconfig. Ricorda di aggiungere caratteri di escape per "\" e "" ".

[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

Puoi fare riferimento all'impostazione oltre il confronto come difftool per l'utilizzo dei comandi git per configurarlo.


Ciao, avevo uno script simile e non è riuscito fino a quando non sono passato a C: \\ Programmi \\ Beyond Compare 4 \\ BComp.exe. Con BCompare.exe il file temporaneo è stato cancellato prima che potesse essere confrontato, quindi ho visto solo l'ultimo file, nessuna versione archiviata.
gabriel

0

Per qualsiasi motivo, per me, il file tmp creato da git diff veniva eliminato prima di essere aperto senza paragoni. Ho dovuto prima copiarlo in un'altra posizione.

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

0

Per MAC dopo aver fatto molte ricerche ha funzionato per me ..! 1. Installa oltre il confronto e questo verrà installato nella posizione sottostante

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

Segui questi passaggi per rendere bc come strumento diff / merge in git http://www.scootersoftware.com/support.php?zz=kb_mac


0

Per git versione 2.15.1.windows.2 con BC2.exe.

La configurazione di seguito funziona finalmente sulla mia macchina.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.