Domanda Differenza tra "git add -A" e "git add".


Il comando git add [--all|-A] sembra essere identico a git add .. È corretto? In caso contrario, come si differenziano?


2387
2018-02-21 06:51


origine


risposte:


Per Git versione 2.x, vedi anche le risposte di seguito.


Sommario:

  • git add -A stadi Tutti

  • git add . fasi nuove e modificate, senza eliminato

  • git add -u stadi modificati e cancellati, senza nuovo


Dettaglio:

git add -A è equivalente a git add .; git add -u.

Il punto importante su git add . è che guarda l'albero di lavoro e aggiunge tutti quei percorsi alle modifiche graduali se sono cambiati o sono nuovi e non ignorati, non mette in scena azioni 'rm'.

git add -u guarda tutto il già traccia i file e mette in scena le modifiche a quei file se sono diversi o se sono stati rimossi. Non aggiunge nuovi file, ma modifica solo le modifiche ai file già tracciati.

git add -A è una scorciatoia pratica per fare entrambe le cose.

Puoi testare le differenze con qualcosa del genere (nota per Git versione 2.x per il tuo output git add .  git status  volere essere diverso):

git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial

echo OK >> change-me
rm delete-me
echo Add me > add-me

git status
# Changed but not updated:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git add .
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
# Changed but not updated:
#   deleted:    delete-me

git reset

git add -u
git status

# Changes to be committed:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git reset

git add -A
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
#   deleted:    delete-me

3652
2018-02-21 09:00



Ecco la tabella per una rapida comprensione:

Git versione 1.x: enter image description here

Git versione 2.x: enter image description here

Bandiere a forma lunga:

  • git add -A è equivalente a git add --all
  • git add -u è equivalente a git add --update

Ulteriori letture:


646
2017-09-25 12:45



Con Git 2.0, git add -A è predefinito: git add . equivale git add -A ..

git add <path> equivale a "git add -A <path>"ora, così   "git add dir/"noterà i percorsi che hai rimosso dalla directory e   registra la rimozione.
  Nelle versioni precedenti di Git, "git add <path>"usato per ignorare le rimozioni.

Si può dire "git add --ignore-removal <path>" a   aggiungi solo percorsi aggiunti o modificati in <path>, se proprio vuoi.

git add è come git add :/ (aggiungi tutto dalla migliore cartella git repo).
Nota che git 2.7 (novembre 2015) ti permetterà di aggiungere una cartella chiamata ":"!
Vedere commettere 29abb33 (25 ott 2015) di Junio ​​C Hamano (gitster).


Nota che starting git 2.0 (Q1 o Q2 2014), quando si parla di git add . (percorso corrente all'interno dell'albero di lavoro), è necessario utilizzare '.' nell'altro git add comandi pure.

Questo significa:

"git add -A ." è equivalente a "git add .; git add -u ."

(Nota il extra '.'per git add -A e git add -u)

Perché git add -A o git add -u funzionerebbe (iniziando solo git 2.0) sul intero albero di lavoroe non solo sul percorso attuale.

Quei comandi lo faranno operare sull'intero albero in Git 2.0 per coerenza con "git commit -a"e altri comandi.   Perché non ci sarà nessun meccanismo da fare "git add -u"comportati come se"git add -u .", è importante per coloro che sono abituati a"git add -u"(senza pathspec) aggiornando l'indice solo per i percorsi nella sottodirectory corrente per iniziare a formare le dita per dire esplicitamente"git add -u ."quando lo dicono prima che arrivi Git 2.0.

Viene emesso un avviso quando questi comandi vengono eseguiti senza un pathspec e quando si hanno modifiche locali al di fuori della directory corrente, perché il comportamento in Git 2.0 sarà diverso   dalla versione di oggi in una situazione del genere.


135
2018-04-23 06:32



Quindi, dalle istruzioni di Charles di cui sopra, dopo aver testato la mia proposta di comprensione sarebbe stata la seguente:

# For the next commit
$ git add .   # add to index only files created/modified and not those deleted
$ git add -u  # add to index only files deleted/modified and not those created
$ git add -A  # do both operation at once, add to index all files

Questo collegamento potrebbe anche essere utile per capire in quale situazione questi comandi possono essere applicati: Rimozione di file cancellati dalla directory di lavoro di Git.


126
2018-06-01 09:27



In ritardo per la festa, ma questa domanda merita anche una risposta rapida più distillata.

git add -A 

Fa entrambi sotto (lo stesso di git add --all)

git add . 

Mette in scena nuovi file + modificati

git add -u 

Fasi modificate + file cancellati


26
2018-04-06 12:56



Le cose sono cambiate con Git 2.0:

  • -A ora è il valore predefinito
  • il vecchio comportamento è ora disponibile con --ignore-removal
  • git add -u e git add -A in una sottodirectory senza percorsi sulla riga di comando operare sull'intero albero

Quindi per Git 2 la risposta è:

  • git add . e git add -A . aggiungi file nuovi / modificati / cancellati nella directory corrente
  • git add --ignore-removal . aggiunge nuovi / modificati file nella directory corrente
  • git add -u . aggiunge i file modificati / cancellati nella directory corrente
  • senza il punto, aggiungi tutti i file nel progetto indipendentemente dalla directory corrente

23
2017-10-13 15:29



Finalmente penso di averlo, molte grazie a tutti voi. Spero che questo possa aggiungere un po 'più di chiarezza.

!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)

I limitatori possono essere -u o -A o nil.

Pathspec può essere un percorso file o punto '.' per indicare la directory corrente.

Importanti conoscenze di base su come git 'aggiunge'.

  • I file invisibili, quelli con prefisso con un punto (dotfile) non vengono mai riconosciuti automaticamente da Git. Non sono mai nemmeno elencati come "non tracciati".
  • Le cartelle vuote non vengono mai aggiunte da git. Non sono mai nemmeno elencati come "non tracciati". (Una soluzione alternativa consiste nell'aggiungere un file vuoto, possibilmente invisibile, ai file tracciati).
  • Lo stato Git non visualizzerà le informazioni sulla sottocartella, ad esempio i file non tracciati, a meno che non venga tracciato almeno un file in tale sottocartella. Prima di allora, git considera l'intera cartella fuori dal campo di applicazione, a la 'vuota'. È vuoto di oggetti tracciati.
  • Specifica di filespec = '.' (punto), o la directory corrente, non è ricorsiva a meno che non sia specificato anche -A. Dot si riferisce rigorosamente alla directory corrente - omette i percorsi trovati sopra e sotto.

Ora, data questa conoscenza, possiamo applicare le risposte sopra.

I limitatori sono i seguenti.

  • -u = --update = sottoinsieme ai file tracciati => Aggiungi = No; Modifica = Sì; Elimina = Sì. => se l'elemento è tracciato.
  • -A = - tutto (non tale -a, che fornisce l'errore di sintassi) = superset di tutti i file non tracciati / tracciati, a meno che in Git <2.0, in cui se viene dato il punto filespec, viene considerata solo quella particolare cartella. => se l'elemento è riconosciuto, git add -A lo troverà e lo aggiungerà.

Il pathspec è il seguente.

  • In Git <2.0, per i due limitatori (aggiornamento e tutti), il nuovo default è di operare sull'intero albero di lavoro, invece del percorso corrente (git <= 1.9),
  • Tuttavia, nella v2.0, l'operazione può essere limitata al percorso corrente: basta aggiungere il suffisso puntuale esplicito (che è valido anche in Git <= 1.9);

git add -A .

git add -u .

In conclusione, la mia politica è;

  • 1.Assicurarsi che gli hunk / file da aggiungere siano conteggiati nello stato git.
  • 1A. Se mancano alcuni elementi, a causa di file / cartelle invisibili, aggiungerli separatamente.
  • 2. Avere un buon gitignore in modo che normalmente solo i file di interesse siano non tracciati e / o non riconosciuti.
  • 3. Dal livello superiore del repository, "git add -A" per aggiungere tutti gli elementi. Funziona in tutte le versioni di git.
  • 4. Rimuovere gli elementi desiderati dall'indice se lo si desidera.
  • 6.Se c'è un grosso bug, fai 'git reset' per cancellare completamente l'indice.

11
2018-04-06 02:03



git add . equivale git add -A . aggiunge file all'indice solo dalle cartelle attuali e secondarie.

git add -A aggiunge file all'indice da tutte le cartelle nella struttura di lavoro.

P.S .: le informazioni si riferiscono a Git 2.0.


7
2018-06-03 19:12



In Git 2.x:

  • Se ti trovi direttamente al directory di lavoro, poi git add -A e git add . lavorare senza differenze.

  • Se sei in qualsiasi sottodirectory del directory di lavoro, git add -A aggiungerà tutti i file dall'intero directory di lavoro, e git add . aggiungerà file dal tuo directory corrente.

E questo è tutto.


2
2018-03-16 22:32