Configuración de la herramienta diff con .gitconfig

159

¿Cómo configuro Git para usar una herramienta diferente para diferir con el archivo .gitconfig?

Tengo esto en mi .gitconfig:

[diff]
    tool = git-chdiff #also tried /bin/git-chdiff

No funciona; solo abre la línea de comando regular diff. Cuando lo hago

export GIT_EXTERNAL_DIFF=git-chdiff

luego git diffabrirá la herramienta de diferenciación externa (así que sé que el script de la herramienta de diferenciación externa funciona bien). ¿Tengo algún problema con mi configuración .gitconfig para la herramienta diff?

ryanzec
fuente

Respuestas:

140

Git ofrece una gama de difftools preconfigurados "listos para usar" (kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, diffuse, opendiff, p4merge y araxis), y también te permite para especificar el tuyo Para usar una de las herramientas de configuración preconfiguradas (por ejemplo, "vimdiff"), agregue las siguientes líneas a su ~/.gitconfig:

[diff]
    tool = vimdiff

Ahora, podrá ejecutar "git difftool" y utilizar su herramienta de elección.

Por otro lado, especificar su propia herramienta difftool requiere un poco más de trabajo, consulte ¿Cómo veo la salida 'git diff' con mi herramienta / visor diff preferido?

Fredrik Pihl
fuente
El primer enlace está roto. Parece que el dominio ha cambiado de .coma .org. Puedo navegar por jeetworks.org/software
RBT
1
¿Qué quiere decir con un difftool preconfigurado "listo para usar"? Para configurar una herramienta de diferencia externa "winMerge" que no está en su lista, tuve que hacer la misma configuración que mencionó en su publicación y todo comenzó a funcionar sin ninguna configuración adicional. Entonces, ¿eso significa que git también admite "winMerge" ya que, por lo que puedo entender de su publicación, requiere un trabajo / configuración / configuración adicional para configurar una herramienta de diferencias que no es compatible de forma inmediata caja por git.
RBT
169

Una forma adicional de hacerlo (desde la línea de comando):

git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false

Las dos primeras líneas configurarán la herramienta difftool y mergetool para tkdiffcambiarla según sus preferencias. La tercera línea deshabilita el molesto mensaje, por lo que cada vez que lo golpee, git difftoolse iniciará automáticamente la herramienta de difusión.

Omer Dagan
fuente
11
Lo hice git config --global diff.tool diffmerge, pero cuando lo hice git diff myfile.txttodavía me dio el valor por defecto de unix diff
amphibient
¿Quizás tiene una configuración local que define otra herramienta diff?
Omer Dagan
1
quizás necesite pasar los parámetros correctos para difuminar: este enlace explica cómo hacerlo para la fusión: enlace: nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy
rptr
55
@amphibient: pruebe la herramienta git diff myfile.txt para usar la herramienta.
JBRWilkinson
72

Otros han hecho una respuesta del 99% sobre esto, pero queda un paso por delante. (Mi respuesta vendrá de OS X, por lo que deberá cambiar las rutas de los archivos en consecuencia).

Realiza estos cambios en su ~/.gitconfig:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE

Esto arreglará la herramienta diff. También puede solucionar esto sin editar ~/.gitconfigdirectamente ingresando estos comandos desde la terminal:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"

El 1% que todos los demás no mencionaron es que cuando se usa esto no se puede ejecutar git diff myfile.txt; Necesitas correr git difftool myfile.txt.

tgoza
fuente
23
Votaron por ese último 1%. No hay nada tan satisfactorio como un clavo totalmente martillado;)
Titou
1
¿Hay alguna forma de convertirla en la herramienta predeterminada?
math0ne
66
Genial, sin git config --global --add difftool.prompt falseembargo , te estás perdiendo el paso . ;)
Suma
36

Aquí está la parte de mi ~ / .gitconfig donde configuro las herramientas diff y merge. Me gusta difundir por SourceGear. (De hecho, me gusta mucho).

[merge]
        tool = diffmerge
[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[diff]
        tool = diffmerge
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"

Entonces, ya ves, estás definiendo una herramienta llamada "diffmerge" en la [difftool "diffmerge"]línea. Luego estoy configurando la herramienta "diffmerge" como predeterminada en la [diff] tool =sección.

Obviamente tengo el comando "diffmerge" en mi camino, aquí. De lo contrario, necesitaría dar una ruta completa al ejecutable.

Dan Ray
fuente
Sin que se escape toda la barra invertida:diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
Tim Lovell-Smith
1
Voy con el más simplediffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
Tim Lovell-Smith
Y tiene un útil script 'sgdm_cygwin.sh' para hacer que la versión de Windows sea fácil de usar desde Cygwin.
thoni56
Entonces puedes hacerlo ln-s <pathtodiffmerge>/sgdm_cygwin.sh /usr/local/bin/diffmergey estás listo para usar la configuración anterior. Así como diffmergedirectamente desde la línea de comando cygwin con rutas cygwin.
thoni56
Sería sgdm.exehoy en día
kzu
22

Reproduciendo mi respuesta de este hilo que era más específico para configurar más allá de comparar como herramienta de diferencia para Git. Todos los detalles que he compartido son igualmente útiles para cualquier herramienta de diferencias en general, así que compártela aquí:

El primer comando que ejecutamos es el siguiente:

git config --global diff.tool bc3

El comando anterior crea la siguiente entrada .gitconfigen el %userprofile%directorio encontrado :

[diff]
    tool = bc3

Luego ejecuta el siguiente comando ( Ejecutar este comando es redundante en este caso en particular y solo se requiere en algunos casos especializados. Lo sabrá en poco tiempo ):

git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"

El comando anterior crea la siguiente entrada en el .gitconfigarchivo:

[difftool "bc3"]
    path = c:/program files/Beyond Compare 3/bcomp.exe

Lo que hay que saber aquí es la clave bc3. Esta es una clave bien conocida para git que corresponde a una versión particular de herramientas de comparación bien conocidas disponibles en el mercado ( bc3corresponde a la tercera versión de la herramienta Beyond Compare). Si desea ver todas las teclas predefinidas, simplemente ejecute el git difftool --tool-helpcomando en git bash. Vuelve debajo de la lista:

vimdiff
vimdiff2
vimdiff3
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff

Puede usar cualquiera de las teclas anteriores o definir una clave personalizada propia. Si desea configurar una nueva herramienta por completo (o una versión recientemente lanzada de una herramienta conocida) que no se asigna a ninguna de las teclas enumeradas anteriormente, entonces puede asignarla a cualquiera de las teclas enumeradas anteriormente o a una nueva Clave personalizada propia.

¿Qué pasa si tiene que configurar una herramienta de comparación que es

  • Absolutamente nuevo en el mercado

O

  • ¿Se ha lanzado una nueva versión de una herramienta ya conocida que no está asignada a ninguna clave predefinida en git ?

Como en mi caso, había instalado beyond compare 4. beyond compare es una herramienta conocida para git pero su versión 4 no está asignada a ninguna de las claves existentes de forma predeterminada. Para que pueda seguir cualquiera de los siguientes enfoques:

  1. Puedo asignar más allá de la herramienta compare 4 a la clave ya existente bc3que corresponde a la versión beyond compare 3. No tenía más allá de comparar la versión 3 en mi computadora, así que no me importó. Si quisiera, podría haberlo asignado a cualquiera de las teclas predefinidas en la lista anterior también, por ejemplo examdiff.

    Si asigna una versión conocida de las herramientas a la clave apropiada ya existente / conocida, entonces no necesitará ejecutar el segundo comando ya que su ruta de instalación ya es conocida por git .

    Por ejemplo, si hubiera instalado más allá de comparar la versión 3 en mi caja, entonces tener la siguiente configuración en mi .gitconfigarchivo hubiera sido suficiente para comenzar:

    [diff]
    tool = bc3
    

    Pero si desea cambiar la herramienta asociada predeterminada, entonces termina mencionando el pathatributo por separado para que git conozca la ruta desde donde se debe iniciar el exe de su nueva herramienta. Aquí está la entrada que zorros git lanzar más allá de comparar 4 en su lugar. Tenga en cuenta la ruta del exe:

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
  2. El enfoque más limpio es definir una nueva clave por completo para la nueva herramienta de comparación o una nueva versión de una herramienta conocida. Como en mi caso, definí una nueva clave bc4para que sea fácil de recordar. En tal caso, debe ejecutar dos comandos en total, pero su segundo comando no establecerá la ruta del ejecutable de su nueva herramienta. En su lugar, debe establecer el cmdatributo para su nueva herramienta como se muestra a continuación:

    git config --global diff.tool bc4
    
    git config --global difftool.bc4.cmd "\"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"\$LOCAL\" -d \"\$REMOTE\""
    

    La ejecución de los comandos anteriores crea las siguientes entradas en su .gitconfigarchivo:

    [diff]
    tool = bc4
    [difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"
    

Recomiendo encarecidamente que siga el enfoque n. ° 2 para evitar confusiones en el futuro.

RBT
fuente
16

Agregar uno de los bloques a continuación me funciona para usar KDiff3 para mis entornos de desarrollo de Windows y Linux. Es una herramienta de combinación y diferenciación multiplataforma consistente y agradable.

Linux

[difftool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

Ventanas

[difftool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3
humor
fuente
¿Ha encontrado una manera de hacer un único archivo .gitconfig multiplataforma que especifique las rutas correctas condicionalmente para Linux y Windows?
Jerry Asher
1
Honestamente, he cambiado para fusionarme en todas partes, y parece que funciona.
moodboom
¿Hay alguna razón para establecer trustExitCode = false? Según tengo entendido, si se establece falso, git ignoraría el código de salida distinto de cero de su herramienta. Entonces, si su herramienta de aplastamiento git pensaría erróneamente que la fusión es exitosa. Pero puede haber una razón para establecerlo como falso, explique.
Apolo
Creo que trustExitCode = falsehará que git le pregunte si la fusión fue exitosa, en lugar de depender de si la herramienta salió con un estado verdadero o falso.
moodboom
4

Si desea tener una opción para usar múltiples herramientas diff, agregue un alias a .gitconfig

[alias]
    kdiff = difftool --tool kdiff3
Alexander Katz
fuente
por mencionar la --toolopción. Gracias
itMaxence
0

Consulte Microsoft vscode-tips-and-tricks . Simplemente ejecute estos comandos en su terminal:

git config --global merge.tool code

Pero primero necesitas agregar codecomando a tu RUTA. ingrese la descripción de la imagen aquí

sudoz
fuente
0

En Windows necesitamos ejecutar el $git difftool --tool-helpcomando para ver las diferentes opciones como:

    'git difftool --tool=<tool>' may be set to one of the following:
                    vimdiff
                    vimdiff2
                    vimdiff3

    The following tools are valid, but not currently available:
                    araxis
                    bc
                    bc3
                    codecompare
                    deltawalker
                    diffmerge
                    diffuse
                    ecmerge
                    emerge
                    examdiff
                    gvimdiff
                    gvimdiff2
                    gvimdiff3
                    kdiff3
                    kompare
                    meld
                    opendiff
                    p4merge
                    tkdiff
                    winmerge
                    xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

y podemos agregar cualquiera de ellos (por ejemplo winmerge) como

$  git difftool --tool=winmerge

Para configurar notepad ++ para ver archivos antes de confirmar:

 git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

y el uso $ git commitabrirá la información de confirmación en el bloc de notas ++

Goyal Vicky
fuente