Aggiunta di soli file non tracciati


168

Uno dei comandi che trovo incredibilmente utile in Git è git add -udi lanciare nell'indice tutto tranne i file non tracciati. C'è un contrario di quello? Negli ultimi mesi, mi sono spesso trovato in una posizione in cui ho aggiunto in modo interattivo alcuni aggiornamenti all'indice e voglio aggiungere tutti i file non tracciati a quell'indice prima di impegnarmi.

C'è un modo per aggiungere solo i file non tracciati all'indice senza identificarli singolarmente? Non vedo nulla di ovvio nei documenti di aiuto, ma forse mi manca?

Grazie.


1
Per quanto riguarda "getta tutto nell'indice, tranne i file non tracciati", non .gitignoreè specificamente progettato per questo scopo git add -u.
Pacerier,

Inoltre, stai chiedendo per aggiungere i file non monitorate durante la rimozione tutte quelle attualmente monitorati, o stai chiedendo per aggiungere i file non monitorate sopra di quelli attualmente tracciati (rendendo il tutto monitorato)?
Pacerier,

Risposte:


237

È facile con git add -i. Digita a(per "aggiungi non tracciato"), quindi *(per "tutto"), quindi q(per uscire) e il gioco è fatto.

Per farlo con un solo comando: echo -e "a\n*\nq\n"|git add -i


4
Speravo che ci fosse qualcosa di meno, beh, interattivo, ma è sicuramente meglio di file per file. :-)
Rob Wilkerson,

34
echo -e "a\n*\nq\n"|git add -i
Mat

@ Grazie grazie anche il comando completo ----> git add -ia * q ??
BKSpurgeon,

Argument list too long... così vicino!
Simeon,

1
Per me con Git 2.21.0 è stato git add -iquindi 4aggiungere non tracciato quindi *per tutti poi quscire
Harry B

36

git ls-files -o --exclude-standard fornisce file non tracciati, in modo da poter fare qualcosa come sotto (o aggiungere un alias ad esso):

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

1
alias gau = "git ls-files -o --exclude-standard | xargs -i git add '{}'" funziona per me
Stephan

git ls-files --help è una lettura abbastanza utile: -o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann

15

Non è esattamente quello che stai cercando, ma l'ho trovato abbastanza utile:

git add -AN

Aggiungerà tutti i file all'indice, ma senza il loro contenuto. I file non tracciati ora si comportano come se fossero tracciati. Il loro contenuto verrà visualizzato in git diff, ed è possibile aggiungerlo in modo interattivo con git add -p.


Questo è esattamente quello che stavo cercando: consente git commit -pdi esplorare anche i nuovi file.
nitsujri,

11

Puoi aggiungerlo al tuo file ~ / .gitconfig:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

Quindi, dalla riga di comando, esegui:

git add-untracked

Mi piace questo approccio, ma non gestisce gli spazi nei nomi dei file.
Paul Coccoli,

9

Le persone hanno suggerito di git ls-fileseseguire il piping dell'output di git addma questo fallirà nei casi in cui ci sono nomi di file contenenti spazi bianchi o caratteri glob come *.

Il modo sicuro sarebbe usare:

git ls-files -o --exclude-standard -z | xargs -0 git add

dove -zdice a git di usare i \0terminatori di linea e -0dice allo stesso xargs. L'unico svantaggio di questo approccio è che l' -0opzione non è standard, quindi solo alcune versioni xargslo supportano.


6

git ls-fileselenca i file nella directory corrente. Se desideri elencare i file non tracciati da qualsiasi punto dell'albero, questo potrebbe funzionare meglio:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

Per aggiungere tutti i file non tracciati nella struttura:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add

6

Ho provato questo e ha funzionato:

git stash && git add . && git stash pop

git stashinserirà solo tutti i file tracciati modificati in uno stack separato, quindi i file rimasti non saranno tracciati. Quindi eseguendo git add .verranno messi in scena tutti i file non tracciati, come richiesto. Alla fine, per recuperare tutti i file modificati dallo stack facendogit stash pop


0

Se hai migliaia di file non tracciati (ugh, non chiedere), allora git add -inon funzioneranno durante l'aggiunta *. Riceverai un errore indicando Argument list too long.

Se poi sei anche su Windows (non chiedere # 2 :-) e devi usare PowerShell per aggiungere tutti i file non tracciati, puoi usare questo comando:

git ls-files -o --exclude-standard | select | foreach { git add $_ }

Una versione più condensata:git ls-files -o --exclude-standard | % { git add $_ }
marckassay

0

Molti buoni consigli qui, ma all'interno di Powershell non sono riuscito a farlo funzionare.

Sono uno sviluppatore .NET e utilizziamo ancora principalmente il sistema operativo Windows poiché non abbiamo utilizzato così tanto il core .Net e la piattaforma multipiattaforma, quindi il mio uso quotidiano con Git è in un ambiente Windows, dove la shell utilizzata è più spesso Powershell e non Git bash.

La seguente procedura può essere seguita per creare una funzione con alias per l'aggiunta di file non tracciati in un repository Git.

All'interno del file $ profile di Powershell (nel caso in cui manchi - puoi eseguire: New-Item $ Profile)

Blocco note $ Profilo

Ora aggiungi questo metodo Powershell:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

Salvare il file $ profile e ricaricarlo in Powershell. Quindi ricaricare il file $ profile con:. $ profilo

Questo è simile al comando di origine negli ambienti * nix IMHO.

Quindi la prossima volta, se sei uno sviluppatore che utilizza Powershell in Windows contro Git repo e desideri includere solo file non tracciati, puoi eseguire:

AddUntracked-Git

Questo segue la convenzione di Powershell in cui hai nomi di verbi.


0

git add. (aggiungi tutti i file in questa directory)

git add -all (aggiungi tutti i file in tutte le directory)

git add -N può essere utile per elencare quelli per dopo ....


git add -uaggiungerà i file modificati non
tracciati

-3

Per aggiungere tutti i file non tracciati il ​​comando git è

git aggiungi -A

Inoltre, se si desidera ottenere maggiori dettagli sulle varie opzioni disponibili, è possibile digitare il comando

git aggiungi -i

invece del primo comando, con questo otterrai più opzioni tra cui l'opzione per aggiungere tutti i file non tracciati come mostrato di seguito:

$ git add -i warning: LF verrà sostituito da CRLF in README.txt. Il file avrà le sue terminazioni di riga originali nella directory di lavoro. avvertenza: LF sarà sostituito da CRLF in package.json.

* Comandi * 1: stato 2: aggiornamento 3: ripristina 4: aggiungi 5 non tracciati: patch 6: diff 7: esci 8: help Cosa ora> a

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.