2009-04-10 6 views
13

Gitx ha un grande visualizzatore di diff, come faccio a far git automaticamente pipe git diff in qualsiasi in gitx?Come rendere git diff usare gitx --diff su OS X

Ho cercato di impostare git config diff.external ad uno script di shell che assomiglia a questo:

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

Tuttavia, che si apre solo tutti i singoli file fino in più finestre GitX, e davvero pasticci i nomi dei file (li cambia tutti in file tmp con nomi pazzeschi).

Qualcuno ha una soluzione migliore?

risposta

3

Mi dispiace, questo non risponde alla tua domanda su Gitx. Non sono nemmeno sicuro se gitx possa funzionare come uno strumento diff generico. Ti potrebbe piacere FileMerge, uno strumento di fusione/diff incluso nell'installazione di Xcode. C'è uno script chiamato opendiff che può lanciarlo per te. Basta creare uno script con la seguente riga e puntare diff.external a questo.

opendiff $2 $5 
+0

+1 per opendiff, ma lo uso solo per visualizzare diff, non modificare. – claf

1

Ho chiesto un similar question qualche tempo fa. Questa risposta potrebbe aiutarti. Ci sono un paio di domande, ma si ha a che fare con l'apertura di una visualizzazione diff in qualcosa di diverso da FileMerge.

2

Ho fatto questo per Araxis unione, ma la modifica di queste istruzioni di base non dovrebbe essere difficile per qualsiasi strumento perferred è.

Prima ho creato ~/bin/git-diff-driver.sh e ho aggiunto il permesso di esecuzione al file.


#!/bin/sh 

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

Araxis installa il suo comando strumenti di interfaccia linea a// local/bin usr Lo strumento di confronto è il loro strumento generico e l'araxis * strumenti Passante confrontare.

Una volta impostata le seguenti linee devono essere aggiunte 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" 

Questo reindirizza tutti a 2 e 3 vie diff attraverso Araxis unione. Sembra che "path =" non dovrebbe essere necessario, ma funziona.

Buona fortuna.

18

come il sigjuice sta dicendo lassù. Solo che i noobs (come sono ora) hanno bisogno di sapere come "connettere" git per usarlo. Ecco quello che ho fatto

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

e ora tutto "diff git qualunque" dovrebbe aprire FileMerge.app ...

+5

opendiff "$ 2" "$ 5" -merge "$ 5" Funziona con percorsi che contengono spazi. ⌘-s salva le modifiche da FileMerge al file locale. –

+0

Come posso annullare questo cambiamento (se dico, mi sono ammalato di opendiff e volevo tornare allo strumento diff in linea)? – thewillcole

+1

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

5

io non sono del tutto sicuro che questo è ciò che si vuole, ma per noi su Mac è sicuramente a portata di mano in ogni modo e in qualche modo correlato, si potrebbe desiderare di provare:

$ git difftool -t opendiff #hash

che apre le diff nel programma opendiff che trovo molto utile. Questo è molto più facile che creare uno script di shell e forzare tutte le tue diff attraverso il nuovo diff esterno. Se non sei su un Mac puoi probabilmente cambiare l'opendiff nel tuo diff tool disponibile preferito ...

+0

fa che" git difftool ... "(senza trattino) – plindberg

+0

Sembra che tu non possa (-cambiare l'opendiff nel tuo preferito disponibile diff tool ...), '-t mysupertool' provoca * Unknown merge tool 'mysupertool' * – conny

2

sto usando questo script che ho chiamato git-diffx e messo sul mio cammino:

#!/bin/bash 

result=$(git diff [email protected]) 

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

Allora, invece di git diff ..., si chiama git diffx ....

2

Questa domanda potrebbe essere un po 'vecchia, ma ho appena trovato qualcosa che funziona per me.

aperta GitX app (V.7), selezionare il menu "GitX" e poi "Enable Terminal Usage"

A diff tubo terminale per GitX via:

git diff | gitx