O comando git add [--all|-A]
parece ser idêntico a git add .
. Isso está correto? Se não, como eles diferem?
Essa resposta só se aplica a Git versão 1.x . Para o Git versão 2.x, consulte outras respostas.
Resumo:
git add -A
realiza todas as alterações
git add .
monitora novos arquivos e modificações, sem exclusões
git add -u
realiza modificações e exclusões, sem novos arquivos
Detalhe:
git add -A
é equivalente a git add .; git add -u
.
O ponto importante a respeito git add .
é que ele olha para a árvore de trabalho e adiciona todos esses caminhos às alterações em etapas, se elas são alteradas ou são novas e não são ignoradas, não realiza nenhuma ação 'rm'.
git add -u
examina todos os arquivos já rastreados e monitora as alterações nesses arquivos se forem diferentes ou se foram removidos. Ele não adiciona novos arquivos, apenas modifica as alterações nos arquivos já rastreados.
git add -A
é um atalho útil para executar os dois.
Você pode testar as diferenças com algo assim (observe que para a versão 2.x do Git, sua saída git add .
git status
será diferente):
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
git add *
?git add -A -p
não funciona como seria de esperar (pedir interativamente sobre arquivos untracked)git add -A :/
ougit add -A .
git add -u
,git add -u :/
o último parâmetro é um caminho, permitindo a você -u determinados diretórios,:/
manipular toda a árvore.git add -u
ou,git add .
e ao fazer isso, torna sua vida mais fácil, mesmo depois de contabilizar o imposto mental extra adicionado para garantir que não haja problemas de sincronização? Eu me pergunto por Git faz divisão não furthuradd -u
em dois comandos separadosadd -u1
eadd-u2
em que um funciona para arquivos começando com algarismos e outro para os arquivos começando com os não-númerosAqui está uma tabela para entendimento rápido:
Git versão 1.x :
Git versão 2.x :
Sinalizadores de formato longo:
git add -A
é equivalente agit add --all
git add -u
é equivalente agit add --update
Leitura adicional:
fonte
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
adicionar apenas os arquivos modificados, mas não os novos ou as exclusões.git add .
apenas adiciona novos arquivos que estão no caminho atual. Ou seja, se você tem um novo diretório../foo
,git add -A
irá montá-lo,git add .
não.git add .
é equivalente agit add -A .
, que é equivalente agit add "*"
Com o Git 2.0,
git add -A
é padrão:git add .
igual agit add -A .
.git add -A
é comogit add :/
( adicione tudo da pasta superior do repositório git ).Observe que o git 2.7 (novembro de 2015) permitirá que você adicione uma pasta chamada "
:
"!Veja commit 29abb33 (25 de outubro de 2015) por Junio C Hamano (
gitster
) .Observe que ao iniciar o git 2.0 (Q1 ou Q2 2014) , ao falar sobre
git add .
(caminho atual dentro da árvore de trabalho), você deve usar '.
' nos outrosgit add
comandos também.Que significa:
(Observe o extra '
.
' paragit add -A
egit add -u
)Porque
git add -A
ougit add -u
operaria (iniciando apenas o git 2.0) em toda a árvore de trabalho , e não apenas no caminho atual.fonte
Nas instruções de Charles , depois de testar meu entendimento proposto, seria o seguinte:
Esta postagem no blog também pode ser útil para entender em que situação esses comandos podem ser aplicados: Removendo arquivos excluídos do diretório de trabalho do Git .
fonte
As coisas mudaram com o Git 2.0 ( 28-05-2014 ):
-A
agora é o padrão--ignore-removal
.git add -u
egit add -A
em um subdiretório sem caminhos na linha de comando operam em toda a árvore.Portanto, para o Git 2, a resposta é:
git add .
egit add -A .
adicione novos arquivos / modificados / excluídos no diretório atualgit add --ignore-removal .
adiciona arquivos novos / modificados no diretório atualgit add -u .
adiciona arquivos modificados / excluídos no diretório atualfonte
Uma resposta rápida mais destilada:
Os dois abaixo (o mesmo que git add --all )
Estágios novos + arquivos modificados
Etapas modificadas + arquivos excluídos
fonte
git add :/
+git add -u :/
No Git 2.x :
Se você estiver localizado diretamente no diretório de trabalho , em seguida,
git add -A
egit add .
trabalho sem a diferença.Se você estiver em qualquer subdiretório do diretório de trabalho ,
git add -A
irá adicionar todos os arquivos de todo o diretório de trabalho , egit add .
irá adicionar arquivos de seu diretório atual .E isso é tudo.
fonte
Espero que isso possa adicionar mais clareza.
Os limitadores podem ser -u ou -A ou nulos.
Pathspec pode ser um caminho de arquivo ou ponto, '.' para indicar o diretório atual.
Conhecimento importante importante sobre como o Git 'adiciona':
-A
também seja especificado. O ponto refere-se estritamente ao diretório atual - omite os caminhos encontrados acima e abaixo.Agora, dado esse conhecimento, podemos aplicar as respostas acima.
Os limitadores são os seguintes.
-u
=--update
= subconjunto dos arquivos rastreados => Adicionar = Não; Mudança = Sim; Excluir = Sim. => se o item for rastreado.-A
=--all
(não existe-a
, o que gera erro de sintaxe) = superconjunto de todos os arquivos não rastreados / rastreados, a menos que no Git anterior a 2.0, em que se o arquivo de ponto for fornecido, somente essa pasta específica seja considerada. => se o item for reconhecido,git add -A
o encontrará e o adicionará.O pathspec é o seguinte.
git add -A .
git add -u .
Em conclusão, minha política é:
git status
..gitignore
arquivo para que normalmente apenas os arquivos de interesse sejam não rastreados e / ou não reconhecidos.fonte
git add .
é igual agit add -A .
adiciona arquivos ao índice somente das pastas atuais e secundárias.git add -A
adiciona arquivos ao índice de todas as pastas na árvore de trabalho.PS: informações relacionadas ao Git 2.0 (28-05-2014).
fonte
Ambos
git add .
egit add -A
prepararão todos os arquivos novos, modificados e excluídos nas versões mais recentes do Git.A diferença é que os
git add -A
arquivos estão em "superior, atual e subdiretórios" que pertencem ao seu repositório Git em funcionamento. Mas fazergit add .
apenas estágios de arquivos no diretório atual e nos subdiretórios seguintes ( não nos arquivos localizados fora, ou seja, nos diretórios mais altos).Aqui está um exemplo:
Se o seu diretório de trabalho atual é
/my-repo
, e vocêrm rootfile.txt
, entãocd subfolder
, seguido porgit add .
, em seguida, ele irá não encenar o arquivo excluído. Mas fazergit add -A
certamente encenará essa mudança, não importa de onde você execute o comando.fonte
A
-A
opção adiciona, modifica e remove entradas de índice para corresponder à árvore de trabalho.No Git 2, a
-A
opção agora é o padrão.Quando a
.
é adicionado, limita o escopo da atualização ao diretório em que você está atualmente, conforme a documentação do GitUma coisa que eu acrescentaria é que, se o modo
--interactive
ou-p
for usado, elegit add
se comportará como se o-u
sinalizador update ( ) fosse usado e não adicionasse novos arquivos.fonte