2012-03-24 15 views
136

Fondamentalmente, non voglio vedere il contenuto modificato, solo i nomi di file e numeri di riga.Posso far sì che git diff mostri solo i nomi dei file e i numeri di riga modificati?

+0

Sono curioso, i numeri di riga sono davvero utili senza codice? O vuoi cambiare il numero di linee? –

+0

beh, non particolarmente, ma ho bisogno di segnalibro dove ho cambiato il mio codice. – wei

+0

Un utilizzo di questo sarebbe quello di combinare le informazioni con un report di copertura del codice, per valutare se il codice nuovo o modificato in un commit è coperto dai test – AntonyG

risposta

40

Nota: se sei solo cercando i nomi di file modificati (senza i numeri di riga per le linee che sono stati cambiati), that's easy, click this link to another answer here.


Non c'è alcuna opzione built-in per questo (e non credo che sia tutto ciò che utile sia), ma è possibile farlo in git, con l'aiuto di un "diff esterno" script.

Ecco una bella schifosa; spetterà a te sistemare l'output nel modo che preferisci.

#! /bin/sh 
# 
# run this with: 
# GIT_EXTERNAL_DIFF=<name of script> git diff ... 
# 
case $# in 
1) "unmerged file [email protected], can't show you line numbers"; exit 1;; 
7) ;; 
*) echo "I don't know what to do, help!"; exit 1;; 
esac 

path=$1 
old_file=$2 
old_hex=$3 
old_mode=$4 
new_file=$5 
new_hex=$6 
new_mode=$7 

printf '%s: ' $path 
diff $old_file $new_file | grep -v '^[<>-]' 

Per i dettagli su "diff esterno" si veda la descrizione del GIT_EXTERNAL_DIFF nel git manual page (attorno alla riga 700, abbastanza vicino alla fine).

+1

Grazie.In realtà ho scritto una sceneggiatura simile, dopo aver confermato che non ci sono opzioni integrate per questo, :) – wei

+0

Piping to '| grep -o '^ [0-9] *' 'ti dà solo numeri, supponendo che non ti interessi il lato destro. – GKFX

43

Numeri di riga come in numero di linee modificate o numeri di riga effettivi contenenti le modifiche? Se si desidera il numero di linee modificate, utilizzare git diff --stat. Questo ti dà un display come questo:

[[email protected]:~/newsite:master]> git diff --stat 
whatever/views/gallery.py | 8 ++++++++ 
1 files changed, 8 insertions(+), 0 deletions(-) 

Non c'è alcuna opzione per ottenere i numeri di riga delle modifiche stesse.

+1

Stavo pensando ai numeri di riga effettivi. Grazie comunque. – wei

+0

'gitk [nome file]' – uday

+0

In qualche modo dubito che voglia uno strumento GUI per questo. – ThiefMaster

464

Così facile:

git diff --name-only 

Andate e diff!

+1

Così semplice e così buono. – Wok

+38

Questa è la risposta che la maggior parte delle persone sta cercando quando visualizzano questa pagina (era per me). Tuttavia, non risponde alla domanda originale, che menziona specificamente i numeri di riga. –

+7

Questa NON dovrebbe essere la risposta accettata in quanto risolve solo metà del problema, è comunque necessario stampare le righe (per ogni file) che sono state modificate. – adamwong246

1

So che questa è una vecchia questione, ma su Windows, questo filtra l'uscita git ai file e numeri di linea modificati:

(git diff -p --stat) | findstr "@@ --git"

diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp 
@@ -47,6 +47,7 @@ <some function name> 
@@ -97,7 +98,7 @@ <another functon name> 

per estrarre i file e le linee cambiata rispetto a quella è un po 'più di lavoro:

for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f

a/dir1/dir2/file.cpp 
47,7 
98,7 
Problemi correlati