git ready

dicas diárias para o noob ao guru
por Nick Quaranto, traduzido pela comunidade RailsBr

A staging area

publicado em 18 Jan 2009

Um dos principais conceitos do GIT é a “staging area” (área temporária). Seu uso pode mudar radicalmente pra o melhor o modo como você trabalha! Vamos ver exatamente como ele funciona e o que você precisa saber para usá-lo.

Com a maioria dos outros sistemas de controlo de versão, há 2 lugares para armazenar dados: no seu “working copy” (ambiente de trabalho) que são os arquivos e diretórios que você está usando atualmente e os datastore (banco de dados) que é onde o controle de versão decide a forma de empacotamento e guarde as suas alterações. No GIT há uma terceira opção: o staging. É basicamente um espaço temporário onde você determina quais mudanças serão adicionadas.

Uma vez que o working copy e o que é salvo pelo GIT ficam separados, isto permite aos desenvolvedores criarem quantos commits eles quiserem, e não do modo como o SCV nos diz. Uma vez que há esta camada no meio, quando o GIT realmente salva os dados, você ganha muito mais flexibilidade e controle.

Utilizar o staging é muito simples com os comandos git add e git commit. Basicamente, você adiciona os arquivos para o staging, e quando estiver satisfeito com as alterações efetua um commit:

Quando elas estão no repositório você pode push (enpurrar) para locais remotos, merge (fundir) em outros branches, e muito mais. Há também ações que podem ser realizadas na própria staging area, tais como Juntando suas alterações.

Vamos ver apenas um exemplo básico de como usar a staging area. Eu só fiz algumas mudanças:

$ git status
  On branch master
  Changed but not updated:
    (use "git add <file>..." to update what will be committed)
 
      modified:   README.md
      modified:   about.html
 
  Untracked files:
    (use "git add <file>..." to include in what will be committed)
 
      help.txt
  no changes added to commit (use "git add" and/or "git commit -a")

Neste exemplo, temos 2 arquivos que o GIT reconhece, e um que não: help.txt. Se fizermos git add ., irá adicionar tudo o que foi alterado ou qualquer arquivo novo que não está sendo monitorados ainda. O comando add não armazenará dados ainda, ele simplesmente coloca no staging (área temporária), onde estes ficam prontos para serem enviados no próximo git commit.

$ git add .
$ git status
  On branch master
  Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)
 
      modified:   README.md
      modified:   about.html
      new file:   help.txt

Como diz o aviso, você pode usar git reset HEAD <file> para restaurar arquivos como antes das modificações. Dessa forma, você pode fazer um commit exatamente o que quiser. Você também pode fazer commit de linhas específicas dos arquivos. Se estiver se admirado sobre como reverter arquivos, Existe uma dica totalmente dedicada que é muito boa. A partir daqui, faça um git commit para mover todas as alterações o “banco de dados” do GIT, e pronto!

$ git commit -m "Adding stuff"
  Created commit e793200: Adding stuff
   2 files changed, 3 insertions(+), 0 deletions(-)
   create mode 100644 help.txt

Se você está procurando mais informações sobre o assunto, verifique estes fantásticos artigos:

  1. The Thing About Git
  2. Git Book – The Git Index

Se você souber de outros recursos que explicam o assunto, nos envie um comentário!