2010-07-01 11 views
36

Sto cercando di capire come conteggiare facilmente i file nel mio indice uncommitted.file conteggio git nell'indice staged

ho provato:

git status | grep '#' | wc -l 

ma ci sono poche righe che iniziano con # che non rappresentano file modificati. Qualcuno ha qualcosa di meglio? Figurati ci doveva essere una bandiera per git status per fare questo.

Anche strumenti come GitX non consentono facilmente di selezionare i file/directory in sequenza e vedere quanti di essi ci sono.

risposta

43

Se volete qualcosa di uno script può utilizzare:

git diff --cached --numstat | wc -l

Se volete qualcosa di leggibile:

git diff --cached --stat

+0

Perché il flag --cached? –

+3

@Humdinger La domanda riguardava i file non salvati nell'indice, che è ciò che mostra "--cached". Senza '--cached', mostrerebbe i file che vengono modificati nella directory di lavoro ma non l'indice (cioè i file nonstage). – mkarasek

5

Prova git status -s:

git status -s | egrep "^M" | wc -l 

M subito dopo l'inizio della linea (^) indica un file di messa in scena. "^ M" sarebbe un file non modificato ma modificato.

+0

Grazie, che ha restituito 0 ma 'git status -s | egrep "^ M" | wc -l' ha funzionato. Penso che lo spazio debba essere dall'altra parte della "M" nella regex. – Bradley

+0

Ah e per includere altri tipi di modifiche (aggiunte, rinominate, create, cancellate): 'git status -s | egrep -c "^ [MARCD]" ' – Bradley

+0

Non capisco perché questa risposta abbia così pochi voti. Questo è più facilmente adattabile per segnalare tutti gli stati possibili. – Michael

13

Questo ha funzionato per me:

git status | grep 'modified:' | wc -l

si restituisce un numero

+1

E quel numero è "1" – Guillochon

+0

questo non funziona con i file appena aggiunti. – pepero

2

Per quel che vale, io preferisco:

git diff --stat | tail -n1 

Uscite qualcosa di simile:

10 files changed, 74 insertions(+), 123 deletions(-)