2012-01-25 23 views
20

Quando faccio un git status ottengo un elenco di file con prefisso new file:. Come posso ottenere solo questa lista? Voglio elaborare questi file in un semplice ciclo in un piccolo script di shell.git: elenca solo i nuovi file

+0

Hai provato 'grep'? 'stato git | nuovo file grep'. – Zeta

+0

Sì, ma questo non mi porta i nomi di file normali. – BetaRide

+2

Preferisco usare 'git ls-files --others --exclude-standard' (http://stackoverflow.com/a/2299448/6309) – VonC

risposta

15

vorrei usare qualcosa come git status --porcelain | grep "^A" | cut -c 4-

+0

Sono passati anni, ma questo non funziona più per me (l'output di 'git status' è probabilmente cambiato). ** MODIFICA: ** Bah. Non l'ho aggiunto/impegnato. È la prova del tempo! – Hendy

12

È possibile utilizzare stato git --short per ottenere l'elenco dei file.

+5

Questo non dovrebbe essere trascurato. – jarederaj

54

Non usare grep per analizzare l'uscita git. Git quasi certamente ha le cose che stai cercando built-in (tranne se stai andando per cose davvero avanzate).
È possibile utilizzare git diff per mostrare le modifiche. --name-only mostra solo i nomi dei file. --diff-filter=A elenca solo i file aggiunti.
Se vuoi vedere i nuovi file che hai già aggiunto all'indice usa --cached, altrimenti omettalo. Per vedere sia diff a HEAD.
I comandi appaiono così:

git diff --name-only --diff-filter=A --cached # All new files in the index 
git diff --name-only --diff-filter=A   # All files that are not staged 
git diff --name-only --diff-filter=A HEAD  # All new files not yet committed 
+2

diff-filter è in realtà la strada da percorrere :) –

+1

È abbastanza spiacevole che l'OP non accetti questa risposta, come a mio modesto parere, hai completamente ragione. :) –

8

Invece di analizzare l'output di "git status", è probabilmente più elegante di utilizzare

git ls-files -o --exclude-standard 

Come con git status, ls-files produrrà uscita relativo al la tua directory di lavoro corrente.

Si potrebbe desiderare di includere l'opzione --full-name:

git ls-files -o --exclude-standard --full-name 
+0

OP chiesto di elencare nuovi file e questa risposta non richiede altri programmi per il pipe l'output a. Ho trovato su mac git diff non ha funzionato con i filtri come previsto mentre questo faceva :) –

+0

Questo è chiaramente il vincitore. Funziona su nuove directory contenenti tutti i nuovi file. – Ali

+0

Tuttavia, si noti che questo non funziona da sottodirectory. Ho finito per usare 'git diff' per far funzionare il mio script da ogni directory nel repository: ' $ git diff --name-only --diff-filter = A HEAD' –

0

Elenco dei nuovi file o per ottenere i file da aggiungere a git, può essere ottenuto utilizzando git status e il comando grep come git status -s | grep ??

[email protected]:~/project-repo-directory# git status -s | grep ?? 
?? src/.../file1.js 
?? src/.../file2.js 
?? src/.../file3.js 
.... 
0
git status | grep "new file:" | cut -c 14- 

git status | grep "modified:" | cut -c 14- 
Problemi correlati