2013-04-02 5 views
11

C'è un modo per aggiungere solo nuovi file e non aggiungere file modificati con git? Cioè, i file che sono elencati come non tracciati con lo stato git.Git aggiungi solo tutti i nuovi file, non i file modificati

Diversamente che naturalmente aggiungere ogni file separatamente.

Non è assolutamente necessario fare questo nel mio caso, la vera domanda per me è risposto qui: How to make git-diff and git log ignore new and deleted files?

Cioè, non mostrano diff su nuovi file, in modo da sto chiedendo a questa di più perché i non ho potuto trovare una risposta da nessuna parte.

+0

Qual è il caso d'uso per questo? Perché non vedo come sarebbe sensato aggiungere file e non aggiungere modifiche rilevanti nei file esistenti e se le modifiche non sono pertinenti rispetto alle modifiche da impegnare, è probabile che debbano essere selezionati con cura in base ad altri criteri. –

+0

Il mio flusso di lavoro è controllare ogni file con diff e poi lo aggiungo a "get it out of the way". In questo modo git diff ora mostra solo i file che sono stati lasciati da controllare. Quindi voglio aggiungere nuovi file (supponendo o credendo che siano "ok") per toglierli di mezzo. –

risposta

12

Forse

git add $(git ls-files -o --exclude-standard) 

git ls-files consente di elencare i file gestiti da git, filtrati da alcune opzioni. -o in questo caso i filtri per mostrare solo "gli altri (cioè i file non monitorate)"

Il $(...) affermazione passa il valore di ritorno di quel comando come argomento di git add.

+0

È necessario escludere nuovamente i file ignorati, altrimenti 'git add' si lamenterà. Per esempio. usando il flag '--exclude-standard' alla chiamata' git ls-files -o'. –

+0

OK, non lo sapevo. Grazie! –

+0

Se ricordo bene, * soltanto * si lamenta, dicendoti che ignorerà quei file e che se vuoi aggiungerli davvero, dovrai usare il flag '--force'. Ancora, fastidioso. –

2

È possibile utilizzare la modalità a corto di git status (vedi man git-status(1)), che dà il seguente risultato:

Senza modalità breve:

$ git status 

... 


# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# README 
# application/libraries/Membres_exception.php 
no changes added to commit (use "git add" and/or "git commit -a") 

Con il modo di breve:

$ git status -s 
M application/models/membre_model.php 
?? README 
?? application/libraries/Membres_exception.php 

Poi utilizzando grep, awk e xarg, è possibile aggiungere i file in cui la prima colonna è ??.

$ git status -s | grep '??' | awk '{ print $2 }' | xargs git add 

e vedere che ha funzionato:

$ git status 
# On branch new 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: README 
# new file: application/libraries/Membres_exception.php 
+0

buona idea, anche se c'è un problema: nel caso in cui percorso file contenga spazi 'awk '{print $ 2}'' catturerà solo la prima parte di tale percorso file. –

+0

come su questo: 'git status -s | grep '??' | awk '{print substr ($ 0, index ($ 0, $ 2))}' | xargs git add' –