Git Diff con Beyond Compare

111

He logrado que git inicie Beyond Compare 3 como una herramienta de diferenciación, sin embargo, cuando hago una diferencia, el archivo con el que estoy comparando no se está cargando. Solo se carga la última versión del archivo y nada más, por lo que no hay nada en el panel derecho de Beyond Compare.

Estoy ejecutando git 1.6.3.1 con Cygwin con Beyond Compare 3. He configurado más allá de cualquier comparación como sugieren en la parte de soporte de su sitio web con un script como este:

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

¿Alguien más ha encontrado este problema y conoce una solución para esto?

Editar:
He seguido las sugerencias de VonC pero sigo teniendo exactamente el mismo problema que antes. Soy un poco nuevo en Git, así que tal vez no esté usando el diff correctamente.

Por ejemplo, estoy tratando de ver la diferencia en un archivo con un comando como este:
git diff main.css

Beyond Compare se abrirá y solo mostrará mi main.css actual en el panel izquierdo, no hay nada en el panel derecho. Me gustaría ver mi main.css actual en el panel izquierdo en comparación con HEAD, básicamente lo que hice por última vez.

Mi git-diff-wrapper.sh se ve así:

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

Mi configuración de git se ve así para Diff:

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

Respuestas:

140

No uso archivos .sh de envoltorio adicional. Mi entorno es Windows XP, git 1.7.1 en cygwin y Beyond Compare 3. A continuación se muestra mi archivo .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"

Luego, uso $ git difftool para comparar y $ git mergetool para fusionar.

Acerca de trustSalirCode : para un comando de combinación personalizado, especifique si el código de salida del comando de combinación se puede utilizar para determinar si la combinación se realizó correctamente. Si no se establece en verdadero, se verifica la marca de tiempo del archivo de destino de la combinación y se asume que la combinación se ha realizado correctamente si el archivo se ha actualizado; de lo contrario, se solicita al usuario que indique el éxito de la combinación.

yehnan
fuente
12
Estoy ejecutando Windows 7 con un shell git mingw. Tuve que usar una ruta de estilo linux en /c/program fileslugar de c:/program files. También quité el "$(cygpath -w $LOCAL)"y acabo de usar "$LOCAL". Eso pareció funcionar.
Landon Poch
5
Como @pClass menciona a continuación, "bc3" es ahora una herramienta interna en las versiones más recientes de git. Debe utilizar un nombre único, como "beyondcompare3"
Scott Wegner
4
GitHub Shell (en Windows 8) me lo dijo bcompare: command not found, hasta que cambié el NOMBRE de la herramienta bc3a otra cosa (como abc3). Supongo que interfirió alguna configuración interna de Github. Además, quité la "$(cygpath -w $LOCAL)"pieza y la reemplacé con "$LOCAL". Ahora funciona bien. ¡Gracias!
Felix Alcala
1
Esto fue un error para mí al mirar la diferencia entre dos confirmaciones. Aquí hay una solución mejor: blog.kifaru.be/2011/07/…
balajimc55
2
También encontré este artículo: scootersoftware.com/support.php?zz=kb_vcs
Guy Avraham
28

Gracias a @dahlbyk , el autor de Posh-Git , por publicar su configuración como esencia . Me ayudó a resolver mi problema de configuración.

[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
fuente
Intenté esta respuesta y no pude diferenciar, tal vez lo estoy haciendo mal.
Epu
1
@Epu, ¿confirmó que sus rutas son las mismas en su máquina? ¿Y es Beyond Compare 3, no una v2 anterior o algo así?
Nick Josevski
Confirmé que las rutas son las mismas y que es bc3.
Epu
1
Lo curioso es que 'git difftool file.txt' y 'git mergetool file.txt' funcionan bien, así que cambié a esos. Pero 'git diff file.txt' ahora está roto (antes de que solía mostrarme la diferencia de consola predeterminada). Ahora me da 'error: no se puede generar bc3: no existe tal archivo o directorio \ nexternal diff murió, deteniéndose en file.txt'
Epu
En caso de que alguien se enfrente al mismo problema que yo (.gitconfig no reconocido después de editarlo) tuve que agregar la ruta de la siguiente manera:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez
20

Ejecute estos comandos para 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

Ejecute estos comandos para 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

Entonces usa git difftool

usuario
fuente
1
¿Se admite Beyond Compare 4?
Danijel
2
@Danijel el documento oficial declarado en los estados de respuesta de @Daniel MagnussonsNote: Use bc3 on the command line for both BC version 3 and 4
BNT
9

La documentación oficial funcionó para mí

Daniel Magnusson
fuente
Gracias, hombre, por señalarme el documento oficial. por lo menos es lo que especifica diff de configuración necesaria para GIT vs GitHub
shridutt kothari
6

Aquí está mi archivo de configuración. Tomó algo de lucha pero ahora está funcionando. Estoy usando Windows Server, msysgit y más allá de comparar 3 (aparentemente una versión x86). Notarás que no necesito especificar ningún argumento, y uso "ruta" en lugar de "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
nachonachoman
fuente
4

La página de soporte de Beyond Compare es un poco breve.

Verifique mi respuesta externa dif. Para obtener más información (con respecto a la sintaxis exacta)

Extraer:

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

en el símbolo del sistema, reemplazando con la ruta a " git-diff-wrapper.sh", por lo que ~/.gitconfigcontiene

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

Asegúrese de usar la sintaxis correcta para especificar las rutas al script de envoltura y a la herramienta de diferencias, es decir, use barras inclinadas hacia adelante en lugar de barras invertidas. En mi caso tengo

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

en .gitconfigy

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

en el script de envoltura.


Nota: también puede utilizar git difftool.

VonC
fuente
3

Tenga en cuenta que ha hecho un camino incorrecto de $ 2. porque está bajo Cygwin pero BC3 no, por lo que debe especificar una ruta completa para ello. como "d: / cygwin $ 2"

Consulte mi git-diff-wrapper.sh aquí:

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

Buena suerte.

z33
fuente
3
Realmente deberías usar cygpath para esto; ej bcompare.exe $(cygpath -w $2). Salud.
Dan Moulding
3

Si está ejecutando Windows 7 (profesional) y Git para Windows (v 2.15 o superior), simplemente puede ejecutar el comando a continuación para averiguar cuáles son las diferentes herramientas de diferencia que admite su Git para Windows.

git difftool --tool-help

Verá una salida similar a esta

git difftool --tool = 'se puede establecer en uno de los siguientes:
vimdiff vimdiff2 vimdiff3

significa que su git no es compatible (no puede encontrar) más allá de la comparación como difftool en este momento.

Para que Git se encuentre más allá de la comparación como difftool válido, debe tener el directorio de instalación Beyond Compare en la variable de entorno de la ruta del sistema . Puede verificar esto ejecutando bcompare desde shell (cmd, git bash o powershell. Estoy usando Git Bash). Si Beyond Compare no se inicia, agregue su directorio de instalación (en mi caso, C: \ Program Files \ Beyond Compare 4) a la variable de ruta del sistema. Después de esto, reinicie su shell. Git mostrará Beyond Compare como posible opción difftool. Puede usar cualquiera de los siguientes comandos para iniciar más allá de la comparación como difftool (por ejemplo, para comparar cualquier archivo local con alguna otra rama)

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

Puede configurar más allá de comparar como difftool predeterminado usando los siguientes comandos

   git config --global diff.tool bc

ps tenga en cuenta que bc en el comando anterior puede ser bc3 o bc en función de lo que Git pudo encontrar en su variable de sistema de ruta.

sarabdeep singh
fuente
2

Actualización para BC4 64bit: esto funciona para Git para Windows v.2.16.2 y Beyond Compare 4 - v.4.2.4 (edición de 64 bits)

Edité manualmente el archivo .gitconfig ubicado en la raíz de mi usuario "C: \ Users \ MyUserName" y reemplacé las etiquetas diff / difftool y 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\"
mitaka
fuente
1

La diferencia está en que se llama al exe: configúrelo para llamar a bcomp.exe y funcionará bien. Configure su entorno para llamar a bcompare.exe y terminará con el lado de la comparación tomado de su sistema de revisión vacío.

rrozema
fuente
1

Ejecute estos comandos para Beyond Compare 3 (si la ruta de BCompare.exe es diferente en su sistema, reemplácela según la suya):

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

Entonces usa git difftool

Jerry Z.
fuente
1

Windows 10, Git v2.13.2

Mi .gitconfig. Recuerde agregar un carácter de escape para '\' y '"'.

[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

Puede hacer referencia a la configuración más allá de toda comparación como difftool para usar comandos git para configurarlo.

zhangyu12
fuente
Hola, tenía un script similar y falló hasta que cambié a C: \\ Program Files \\ Beyond Compare 4 \\ BComp.exe. Con BCompare.exe, el archivo temporal se eliminó antes de poder compararlo, por lo que solo vi el archivo más reciente, no la versión registrada.
gabriel
0

Por alguna razón, para mí, el archivo tmp creado por git diff se estaba eliminando antes de que se abriera sin comparación. Primero tuve que copiarlo en otra ubicación.

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

Para MAC, después de investigar mucho, funcionó para mí ..! 1. Instale el más allá de la comparación y este se instalará en la siguiente ubicación

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

Siga estos pasos para hacer bc como herramienta diff / merge en git http://www.scootersoftware.com/support.php?zz=kb_mac

Sreedhar GS
fuente
0

Para git versión 2.15.1.windows.2 con BC2.exe.

La siguiente configuración finalmente funciona en mi máquina.

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

YChi Lu
fuente