2010-10-07 3 views
22

Durante la creazione, creo campi stringa che ho incorporato nell'output collegato. Molto utile.Qual è un modo semplice per rilevare i file modificati in un'area di lavoro Git?

Diverso da un complesso sed/grep analisi del comando git status, come posso facilmente determinare se i file nell'area di lavoro sono stati modificati in base alle git?

+0

Se sei solo alla cura di sapere se qualcosa è cambiato (non quelli che sono cambiati) Vedere [Come faccio a livello di programmazione determinare se ci sono cambiamenti uncommited ?] (http://stackoverflow.com/q/3878624/193688) –

risposta

24

git ls-files -m

Per trovare questo si potrebbe naviga attraverso git help -a.

+0

Questo è perfetto. – Jamie

+8

@Jamie: i file con modifiche a staging (ma non salvate) non verranno visualizzati con 'git ls-files -m', che può essere o non essere quello che vuoi. –

+1

Ah. Grazie per il tuo contributo. Sinceramente, 'git ls-files -m' non è quello che voglio, ma risponde alla mia domanda specifica. +1 per commento e risposta però. – Jamie

17

git status --porcelain sembra fornire un output parsable.

+0

Molto bello. Sarà utile per altri motivi. – Jamie

+0

È grandioso, l'ho appena usato per automatizzare i riepiloghi di commit git (come quelli ottenuti dall'interfaccia web di GitHub) che in realtà sono arrivato a questa domanda cercando: [one-liner da aggiungere, commit e push] (https: // github. com/lmmx/devnotes/wiki/Automated-git-status-sintesi). –

26

Se si desidera solo una pianura “Ci sono delle differenze da capo?”:

git diff-index --quiet HEAD 

Se il codice di uscita è 0, allora non ci sono differenze.

Se si vuole “Quello che i file sono stati modificati da TESTA?”:

git diff-index --name-only HEAD 

Se si vuole “Quello che i file sono stati modificati da HEAD, e in che modo hanno cambiato (aggiunte, eliminate, cambiato)? “:

git diff-index --name-status HEAD 

Aggiungi -M (e -C) se si desidera rinominare (e copiare) di rilevamento.

Questi comandi controllano sia il contenuto di staged (cosa c'è nell'indice) sia i file nell'albero di lavoro. Alternative come git ls-files -m controllano solo l'albero di lavoro rispetto all'indice (cioè trascurano qualsiasi contenuto in scena (ma non eseguito) che si trova anche nell'albero di lavoro).

2

git diff --name-only fa lo stesso (potrebbe essere più intuitiva ...)