2009-04-10 15 views
13

Gitx tiene un gran visor de diferencias, ¿cómo hago git automáticamente pipe git diff lo que en gitx?¿Cómo se hace git diff use gitx --diff en OS X

he tratado de configurar git config diff.external a un script de shell que tiene este aspecto:

git diff "$2" "$5" | gitx 

Sin embargo, que sólo se abre todos los archivos individuales en múltiples ventanas gitx, y lo que realmente se mete los nombres de los archivos (los cambia a todos los archivos tmp con nombres locos).

¿Alguien tiene una mejor solución?

Respuesta

3

Lamentamos que esto realmente no responda a su pregunta sobre gitx. Ni siquiera estoy seguro de si gitx puede funcionar como una herramienta de diff genérica. Es posible que le guste FileMerge, una herramienta merge/diff incluida en la instalación de Xcode. Hay un script llamado opendiff que puede lanzarlo por usted. Simplemente haga un script con la siguiente línea y señale diff.external en él.

opendiff $2 $5 
+0

+1 para opendiff, pero solo lo uso para ver diff, no editar. – claf

1

Hace un tiempo pedí similar question. Esa respuesta puede ayudarte. Hay un par de preguntas allí, pero una tiene que ver con abrir una vista de diferencias en algo que no sea FileMerge.

2

Hice esto para la fusión de Araxis, pero la modificación de estas instrucciones básicas no debería ser difícil para cualquiera que sea la herramienta que usted prefiera.

Primero creé ~/bin/git-diff-driver.sh y agregué permiso de ejecución al archivo.


#!/bin/sh 

/usr/local/bin/compare -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5" 

Araxis instala su comando herramientas de interfaz de línea// local/bin usr La herramienta de comparación es su herramienta genérica y la Araxis * Herramientas de alimentación a través de comparar.

Una vez que esto está configurado necesita ser añadido a ~/.gitconfig


[merge] 
    tool = araxismerge 
[mergetool "araxismerge"] 
    cmd = "/usr/local/bin/compare -3 -merge -wait $LOCAL $BASE $REMOTE $MERGED" 
    path = /usr/local/bin/ 
[diff] 
    external = "/Users/mark/bin/git-diff-driver.sh" 

las siguientes líneas Este redirecciona todos diffs de 2 vías y 3 vías a través de Araxis Merge. Parece que el "path =" no debería ser necesario, pero funciona.

Buena suerte.

18

como sigjuice está diciendo allá arriba. Solo que los noobs (como yo soy ahora) necesitan saber cómo "conectar" a git para usarlo. Esto es lo que hice

echo 'opendiff $2 $5' > ~/opendiff-git.sh 
chmod a+x ~/opendiff-git.sh 
git config --global diff.external ~/opendiff-git.sh 

y ahora todos los "git diff lo que" se debe abrir FileMerge.app ...

+5

opendiff "$ 2" "$ 5" -merge "$ 5" Funciona con las rutas que tienen espacios en ellas. ⌘-s guarda los cambios de FileMerge en el archivo local. –

+0

¿Cómo puedo deshacer este cambio (por ejemplo, me cansé de opendiff y quería volver a la herramienta diff en línea)? – thewillcole

+1

@the Will Cole: 'git config --global --unset diff.external' – AlcubierreDrive

5

no estoy muy seguro de que esto es lo que quiere, pero para nosotros en los Macs seguro que es práctico de todos modos y de alguna manera relacionado, es posible que desee probar:

$ git difftool -t opendiff #hash

que abre el diff en el programa opendiff que me parece muy útil. Esto es mucho más fácil que crear un script de shell y forzar todas sus diferencias a través de la nueva diferencia externa. Si no está en una Mac, probablemente pueda cambiar la opendiff en su herramienta diff favorita disponible ...

+0

make that" git difftool ... "(sin guión) – plindberg

+0

Parece que no se puede (-cambiar la opendiff en su favorito disponible herramienta diff ...), '-t mysupertool' causes * Herramienta de combinación desconocida 'mysupertool' * – conny

2

estoy usando este script que he llamado git-diffx y poner en mi camino:

#!/bin/bash 

result=$(git diff [email protected]) 

if [ "$result" ]; then 
    echo "$result" | gitx 
fi 

Entonces, en lugar de git diff ..., se llama git diffx ....

2

Esta pregunta puede ser un poco antigua, pero acabo de encontrar algo que me funcione.

abierto GitX aplicación (v.7), seleccionar el menú "GitX" y luego "permitir el uso de terminales"

En diff terminal de tubería a través de gitx:

git diff | gitx