Diferença entre "git add-A" e "git add."

o comando git add [--all|-A] parece ser idêntico a git add .. Está correcto? Em caso negativo, de que forma diferem?

 2436
Author: CharlesB, 2009-02-21

9 answers

Esta resposta só se aplica a git versão 1.x . Para Git versão 2.x, veja outras respostas.


Resumo:

  • git add -A fases todas as alterações

  • git add . fases novos ficheiros e modificações, sem supressões

  • git add -u modificações de fases e supressões, sem ficheiros novos


Detalhe:

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

O ponto importante sobre git add . é que ele olha para a árvore de trabalho e adiciona todos os caminhos para o encenado alterações, se eles são alterados ou são novos e não ignorado, ele não fase, qualquer 'rm' ações.

git add -u olha para todos os arquivos rastreados e fases as alterações a esses arquivos se eles são diferentes ou se eles foram removidos. Ele não adiciona nenhum arquivo novo, ele só estágios mudanças para já rastreado arquivo.

git add -A é um bom atalho para fazer os dois.

Você pode testar as diferenças com algo assim (note que para Git versão 2.x a sua saída para git add . git status will be different):

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
 3717
Author: CB Bailey, 2018-08-30 16:04:23

Aqui está a tabela para compreensão rápida:

Git Version 1.x : enter image description here

Git Version 2.x : enter image description here

Bandeiras de forma longa:

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

Outras leituras:

 670
Author: Developer, 2017-05-23 12:26:36

Com O Git 2. 0, git add -A é por omissão: git add . é igual a git add -A ..

git add <path> é o mesmo que "git add -A <path> " agora, para que "git add dir/ " irá reparar nos locais que removeu da pasta e grava a remoção.
Nas versões mais antigas do Git, "git add <path>" Usado para ignorar remoções.

Podes dizer: adicione apenas os locais adicionados ou modificados em <path>, se realmente quiser.

git add é como ... git add :/ ( adicionar tudo do topo do git repo pasta ).
Note que git 2.7 (Nov. 2015) permitirá que você adicione uma pasta chamada " :"!
Ver commit 29abb33 (25 de Outubro de 2015) por Junio C Hamano (gitster).


Note que iniciando o git 2.0 (Q1 ou Q2 2014) , ao falar sobre git add . (localização actual dentro da árvore de trabalho), você deve usar '. ' nos outros comandos git add também.

Isso significa:

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

(anote o extra '. ' para git add -A e git add -u)

Porque {[[0]} ou git add -u funcionariam (iniciando apenas o git 2.0) em toda a árvore de trabalho , e não apenas no caminho actual.

Esses comandos irão operar em toda a árvore no git 2.0 por coerência com "git commit -a " e outros comandos . Porque não haverá mecanismo para fazer " git add -u "comportar-se como se" git add -u .", é importante para aqueles que estão acostumados a " git add -u" (sem pathspec) atualizar o índice apenas para os caminhos na subdiretoria atual para começar a treinar seus dedos para dizer explicitamente "git add -u ." quando eles querem dizer isso antes que o git 2.0 venha.

Um aviso é emitido quando estes comandos são executados sem um pathspec e quando você tiver alterações locais fora do diretório atual, porque o comportamento em Git 2.0 vai ser diferente a partir da versão de hoje em tal situação.

 142
Author: VonC, 2017-05-23 12:10:45
Então, das instruções de Charles acima, depois de testar o meu entendimento proposto, seria o seguinte:
# 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

Esta ligação também pode ser útil para compreender em que situação esses comandos podem ser aplicados: a remover ficheiros apagados da sua pasta de trabalho do Git .

 127
Author: Richard, 2013-07-11 05:54:30
Tarde para o partido, mas esta questão também merece uma resposta mais rápida e destilada.
git add -A 

Ambos os valores abaixo (o mesmo que o git adiciona --todos)

git add . 

Fases novas + ficheiros modificados

git add -u 

Fases modificadas + ficheiros apagados

 29
Author: K. Kilian Lindberg, 2014-04-23 11:48:01

As coisas mudaram com o Git 2.0:

  • -A é agora o valor por omissão
  • o comportamento antigo está agora disponível com --ignore-removal
  • git add -u e git add -A numa subdiretoria sem caminhos na linha de comandos, operem em toda a árvore

Então para o git 2 a resposta é:

  • git add . e git add -A . Adicionar ficheiros novos/modificados / apagados na pasta actual
  • git add --ignore-removal . adiciona ficheiros novos / modificados na pasta actual
  • git add -u . adiciona ficheiros modificados / apagados na pasta actual
  • sem o ponto, adicione todos os ficheiros do projecto, independentemente do directório actual
 24
Author: 0xF, 2014-10-13 15:29:52
Finalmente acho que percebo isto, muito obrigado a todos. Espero que isto possa trazer mais clareza.
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)

Os limitadores podem ser-u ou-a ou nulos.

Pathspec pode ser UM filepath ou ponto, '."para indicar o directório actual.

Conhecimento de fundo importante sobre como o git "acrescenta".

  • arquivos invisíveis, aqueles prefixados com um ponto, (dotfiles) nunca são automaticamente reconhecidos pelo Git. Elas nunca são listadas como "não rastreadas".
  • as pastas vazias são nunca adicionado pelo git. Elas nunca são listadas como "não rastreadas". (Uma solução é adicionar um arquivo em branco, possivelmente invisível, aos arquivos rastreados.)
  • o estado do Git não irá mostrar a informação da subpasta, ou seja, os ficheiros sem rasto, a menos que pelo menos um ficheiro nessa subpasta seja seguido. Antes disso, o git considera toda a pasta fora do escopo, uma la 'vazia'. Está vazio de itens rastreados.
  • especificando um ficheiro='.'(dot), ou o diretório atual, não é recursivo a menos que-A também é descrever. O ponto refere - se estritamente à pasta actual-omite os caminhos encontrados acima e abaixo.
Agora, dado esse conhecimento, podemos aplicar as respostas acima. Os limitadores são os seguintes.
  • - u = -- update = sub-conjunto de ficheiros rastreados = > Adicionar = NÃO; alterar = Sim; apagar= Sim. = > iff o item é rastreado.
  • - a = --all (No such-a, which gives syntax error) = superset of all unltracked/tracked files, unless in Git iff o item é reconhecido, git add-A irá encontrá-lo e adicioná-lo.

O pathspec é o seguinte.

  • no Git
  • No entanto, em v2. 0, a operação pode ser limitada ao caminho actual: basta adicionar o sufixo explícito dos pontos (que também é válido no Git

git add -A .

git add -u .

Para concluir, a minha política é:
  • 1.Certifique-se de que todos os blocos/arquivos a serem adicionados são contabilizados no estado git.
  • 1A. se faltar algum item, devido a ficheiros/pastas invisíveis, adicione-o separadamente.
  • 2.Tenha um bom gitignore de modo que normalmente apenas arquivos de interesse não são rastreados e / ou não reconhecidos.
  • 3.Do nível superior do repo, "git add-A" para adicionar todos os itens. Isto funciona em todas as versões de pira-te.
  • 4.Remova todos os itens desejados do Índice, se desejar.
  • 6.Se houver um bug grande, faça o 'git reset' para limpar o índice completamente.
 11
Author: AnneTheAgile, 2016-11-21 14:45:57

git add . é igual a git add -A . adiciona ficheiros ao índice apenas das pastas actuais e das crianças.

git add -A adiciona ficheiros a indexar de todas as pastas na árvore de trabalho.

P. S.: A informação diz respeito ao Git 2.0.
 8
Author: Alex78191, 2016-06-03 19:12:18

In Git 2.x:

  • Se você está localizado diretamente no diretório de trabalho , Então git add -A e git add . trabalham sem diferença.

  • Se estiver em qualquer sub-pasta da pasta de trabalho , git add -A irá adicionar todos os ficheiros de toda a pasta de trabalho , e git add . irá adicionar ficheiros da sua pasta actual.

E é tudo.
 7
Author: simhumileco, 2018-03-16 22:32:31