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?
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çõesgit add .
fases novos ficheiros e modificações, sem supressõesgit 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 já 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
Aqui está a tabela para compreensão rápida:
Git Version 1.x :
Git Version 2.x :
Bandeiras de forma longa:
-
git add -A
é equivalente agit add --all
-
git add -u
é equivalente agit add --update
Outras leituras:
Com O Git 2. 0, git add -A
é por omissão: git add .
é igual a git add -A .
.
Podes dizer: adicione apenas os locais adicionados ou modificados em
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.<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.
"
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.
# 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 .
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
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
egit 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 .
egit 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
!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.
- - 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 .
- 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.
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.
In Git 2.x:
Se você está localizado diretamente no diretório de trabalho , Então
git add -A
egit 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 , egit add .
irá adicionar ficheiros da sua pasta actual.