git add
Ao trabalhar no Git, ou em outros sistemas de controle de versão, o conceito de "salvar" é um processo mais matizado do que salvar em um processador de palavras ou em outros aplicativos tradicionais de edição de arquivo. A expressão de software tradicional "salvar" é sinônimo do termo do Git "confirmar". Uma confirmação é o equivalente do Git de "salvar". O salvar tradicional deve ser pensado como uma operação do sistema de arquivos usada para substituir o arquivo existente ou gravar um novo arquivo. Como alternativa, a confirmação do Git é uma operação que age na coleta de arquivos e diretórios.
Salvar alterações no Git e no SVN também são processos diferentes. Commits ou "verificações" de SVN são operações que fazem envio por push remoto para um servidor centralizado. Então um commit de SVN precisa de acesso à Internet para "salvar" todas as alterações do projeto. Os commits do Git podem ser capturados e construídos no local e, em seguida, enviados por push para um servidor remoto conforme necessário usando o comando git push -u origin main
. A diferença entre os dois métodos é uma diferença fundamental entre designs de arquitetura. O Git é um modelo de aplicativo distribuído enquanto o SVN é um modelo centralizado. Os aplicativos distribuídos são, em geral, mais robustos, pois não têm um único ponto de falha como um servidor centralizado.
O Git tem um mecanismo de salvamento adicional chamado "stash". O stash é uma área de armazenamento temporário para alterações que ainda não estão prontas para realizar commit. O stash opera no diretório ativo, a primeira de três árvores e tem diversas opções de uso. Para saber mais, visite a página git stash
.
Os repositórios do Git podem ser configurados para ignorar arquivos ou diretórios específicos. Assim você impede que o Git salve alterações em qualquer conteúdo ignorado. O Git tem vários métodos de configuração que gerenciam a lista a serem ignorados. A configuração do Git para ignorar é discutida em mais detalhes na página git ignore
.
git add
O comando git add
adiciona uma alteração no diretório ativo à área de staging. Ele diz ao Git que você quer incluir atualizações a um arquivo específico no próximo commit. No entanto, git add
não tem efeito real e significativo no repositório — as alterações não são gravadas mesmo até você executar git commit
.
Junto com esses comandos, você também vai precisar de git status
para ver o estado do diretório ativo e da área de staging.
Como funciona
Os comandos git add
e git commit
compõem o fluxo de trabalho fundamental do Git. Esses são os dois comandos que cada usuário do Git precisa entender, não importa o modelo de colaboração da equipe. Eles são os meios de gravar versões de um projeto no histórico do repositório.
O desenvolvimento de um projeto gira em torno do padrão básico editar/preparar/fazer commit. Primeiro, você edita os arquivos no diretório ativo. Quando estiver pronto para salvar uma cópia do estado atual do projeto, você prepara as alterações com git add
. Depois que estiver satisfeito com a captura de tela montada, você faz commit no histórico do projeto com git commit
. O comando git reset
é usado para desfazer um commit ou captura de tela preparada.
Além de git add
e git commit
, um terceiro comando, git push
, é essencial para um fluxo de trabalho colaborativo completo do Git. O git push
é utilizado para enviar as alterações com commit para repositórios remotos para colaboração. Assim os outros membros da equipe podem acessar um conjunto de alterações salvas.
O comando git add
não deve ser confundido com svn add
, que adiciona um arquivo ao repositório. O git add
funciona no nível mais abstrato de alterações. Ou seja: o git add
precisa ser chamado toda vez que você altera um arquivo, enquanto o svn add
precisa ser chamado apenas uma vez para cada arquivo. Pode parecer redundante, mas esse fluxo de trabalho faz com que seja muito mais fácil manter um projeto organizado.
A área de staging
A função principal do comando git add
é promover alterações pendentes no diretório ativo para a área git staging
. A área de staging é um dos recursos mais exclusivos do Git e pode levar um tempo para você se acostumar a ela se você estiver vindo de um contexto de SVN (ou mesmo de Mercurial). Ajuda pensar nela como um buffer entre o diretório ativo e o histórico do projeto. A área de staging é considerada uma das "três árvores" do Git, junto com o diretório ativo e o histórico de commits.
Em vez de confirmar todas as alterações feitas desde a última confirmação, a montagem permite agrupar as alterações relacionadas em capturas instantâneas altamente focadas antes de realmente confirmá-las no histórico do projeto. Ou seja, você pode fazer todo tipo de edição em arquivos não relacionados e, em seguida, voltar e dividi-los em confirmações lógicas adicionando alterações relacionadas à montagem e confirmá-las separadamente. Como em qualquer sistema de controle de revisão, é importante criar confirmações atômicas para que seja fácil controlar os bugs e reverter as alterações com impacto mínimo para o restante do projeto.
Opções comuns
git add <file>
Preparar todas as alterações em <file>
para o próximo commit.
git add <directory>
Preparar todas as alterações em <directory>
para o próximo commit.
git add -p
Comece uma sessão de staging interativa que deixe você escolher partes de um arquivo para adicionar ao próximo commit. Ela vai mostrar a você um trecho das alterações e solicitar um comando. Use y
para montar o trecho, n
para ignorar o trecho, s
para fazer a divisão em trechos menores, e
para fazer a edição manual do trecho e q
para sair.
Exemplos
Quando você está começando um novo projeto, git add
tem a mesma função que svn import
. Para criar um commit inicial do diretório atual, use os dois comandos a seguir:
git add .
git commit
Depois que você deixa seu projeto ativo e em funcionamento, novos arquivos podem ser adicionados passando o caminho para git add
:
git add hello.py
git commit
Os comandos acima também podem ser usados para registrar alterações nos arquivos existentes. Novamente, o Git não diferencia entre alterações de staging em novos arquivos e alterações em arquivos que já foram adicionados ao repositório.
Resumo
Na revisão, git add
é o primeiro comando em uma cadeia de operações que direciona o Git para "salvar" uma captura de tela do estado do projeto atual no histórico de commit. Quando usado sozinho, git add
promove alterações pendentes do diretório ativo para a área de staging. O comando git status
é usado para examinar o estado atual do repositório e pode ser usado para confirmar uma promoção de git add
. O comando git reset
é usado para desfazer um git add
. O comando git commit
é, então, usado fazer commit de uma captura de tela no diretório de staging para o histórico de commit de repositórios.