2015-02-16 11 views
23

La mia domanda è piuttosto semplice, anche se non ho avuto fortuna a trovare una risposta.Git: rimuovere il comando positivo/negativo dalle linee in diff

Desidero rimuovere i simboli più/meno iniziali da ciascuna riga in git diff. Prima di chiedere il motivo per cui voglio fare questo, mi permetta di delineare le mie ragioni:

  1. Linee che sono esattamente 80 caratteri sarà in overflow da un singolo carattere, che sembra proprio pianura scomodo
  2. La colorazione è abbastanza per me di distinguere tra aggiunte/eliminazioni
  3. preferisco mantenere la mia larghezza della finestra del terminale a 80 caratteri (in contrapposizione a un arbitrario 81 caratteri) per mantenere la coerenza con tutto il resto che faccio nel mio terminale (al di fuori del git)

C'è qualche configurazione per questo? In caso contrario, come posso farlo in un modo che mi permetta comunque di sfogliare il mio stile dif less?

Qualsiasi intuizione sarebbe molto apprezzata.

+2

Il +/- è solo diff opere. Potrebbe essere necessario utilizzare uno strumento diff diverso se non si desidera il +/-. – R0MANARMY

+0

@Dave: alcuni sistemi hanno solo un terminale (che non gira all'interno di una shell grafica) - come 'tty' - in questi terminali non possono essere ridimensionati, semplicemente perché hanno un raster fisso ... –

risposta

20

Una possibilità è quella di utilizzare sed per rimuovere il carattere indesiderato da diff, preservando il colore:

git diff --color | sed -r "s/^([^-+ ]*)[-+ ]/\\1/" | less -r 

(Si noti che è necessario rimuovere lo spazio iniziale, nonché, come è emessa da diff.)

+7

Questo funziona per anche se dovevo cambiare 'sed -r' in sed -E' (sto usando OS X, quindi presumo sia una sorta di stranezza legata alla piattaforma). Ad ogni modo, questa soluzione funziona bene come un alias git - grazie mille :) – caleb531

+0

Ho un alias nel mio profilo. Alias ​​nm = 'sed -r "s/^ ([^ - +] *) [- +]/\\ 1/"'e ho anche fatto: git config alias.df =' diff --color 'Così ora posso fare: git diff [quali parametri voglio] | nm per sbarazzarsi di tutti i vantaggi e svantaggi, mantenendo il colore. ("nm" sta per "no meno") – JoelFan

+1

questa opzione è migliore di '--color-words' perché mantiene le modifiche su righe separate. alcuni utenti non vogliono concatenare le modifiche che si verificano sulla stessa linea. questo rimuove il più e il meno preservando le interruzioni di riga. – brianyang

4

per gli utenti Mac si dovrà utilizzare il seguente comando:

git diff --color | sed -E "s/^([^-+ ]*)[-+ ]/\\1/" | less -r

caleb531 fornito nella risposta accettata ma c'era un piccolo errore di battitura.

Poi, se si vuole buttare in questo un alias si può fare:

alias diff='git diff --color | sed -E "s/^([^-+ ]*)[-+ ]/\\1/" | less -r'

51

Il modo più semplice che ho visto è questo .. Molto facile da ricordare (I cambiamenti in formato testo. Quindi è necessario conoscere la modifica del codice)

git diff --color parole



Ecco un modo per renderlo di default
Se si utilizza linux aggiungere il seguente comando al vostro ~/.bashrc file di
Quindi è possibile utilizzare gitdiffsenza spazio come un altro comando.

alias gitdiff='git diff --color-words' 
+3

C'è un modo per renderlo predefinito? – ioquatix

+3

Se stai usando linux aggiungi il comando all'interno della parentesi al tuo file ~/.bashrc (alias gitdiff = 'git diff --color-words'). Quindi puoi usare gitdiff senza spazio come un altro comando. – smilyface

+1

Questo fa più che rimuovere il +/- per me. Questo mette anche alcune aggiunte/rimozioni sulla stessa linea, sfortunatamente. –

2

Se posso rispondere alla mia domanda, alla fine ho scelto di utilizzare uno strumento chiamato diff-so-fancy. Non solo rimuove il +/- dalle mie differenze, ma ottimizza anche le intestazioni dei file e evidenzia le modifiche all'interno di ciascuna riga.

diff-so-fancy