Imagens utilizadas pela seção sobre branches e histórico.
[cursogit.git] / Trabalhando_com_Git.mdwn
index c923ffc..987b34d 100644 (file)
@@ -67,3 +67,111 @@ deve ser utilizado.
 A opção -a do comando git commit adiciona as alterações e remoções ao
 índice para o commit, mas não adiciona novos arquivos, que devem ser
 adicionados com o comando git add.
+
+## Diferenças entre diretório de trabalho, índice e HEAD
+
+Para exibir a diferença entre o diretório de trabalho e o índice, pode
+ser utilizado o comando git diff.
+
+       ~/project$ git diff
+       diff --git a/INSTALL b/INSTALL
+       index e69de29..3924362 100644
+       --- a/INSTALL
+       +++ b/INSTALL
+       @@ -0,0 +1 @@
+       +# Instruções de instalação
+       ~/project$ 
+
+Ao adicionar as alterações ao índice, git diff não mostrará nenhuma
+diferença.
+
+       ~/project$ git add INSTALL
+       ~/project$ git diff
+       ~/project$
+
+Note que as alterações ainda não foram gravadas com um commit. Para
+verificar as diferenças entre o índice e o último commit, também chamado
+HEAD, use a opção --cached de git diff.
+
+       ~/project$ git diff --cached
+       diff --git a/INSTALL b/INSTALL
+       index e69de29..3924362 100644
+       --- a/INSTALL
+       +++ b/INSTALL
+       @@ -0,0 +1 @@
+       +# Instruções de instalação
+       ~/project$ 
+
+Algumas vezes, a intenção ao utilizar git diff é comparar o diretório de
+trabalho com o último commit, independente das alterações presentes no
+índice. Para tanto, deve ser especificado o parâmetro HEAD para o
+comando git diff.
+
+       ~/project$ git diff HEAD
+       diff --git a/INSTALL b/INSTALL
+       index e69de29..3924362 100644
+       --- a/INSTALL
+       +++ b/INSTALL
+       @@ -0,0 +1 @@
+       +# Instruções de instalação
+       ~/project$ 
+
+## Ignorando arquivos
+
+Em muitas situações, arquivos são gerados a partir de outros, como no
+caso de programas compilados ou minificados. Como boa prática, tais
+arquivos não são mantidos em controle de versão, mas devem ser gerados
+de forma automática e reprodutível.
+
+No entanto, tais arquivos, assim como outros arquivos temporários ou
+gerados pelo sistema operacional podem aparecer constantemente na saída
+de git status e outros comandos. Isso dificulta a leitura da saída
+destes comandos e pode ser evitado com o uso de git ignore.
+
+Seja através do comando git ignore ou editando diretamente o arquivo
+.gitignore, é possível instruir o git a ignorar arquivos que
+correspondam a um padrão. O padrão *.html, por exemplo, faz com que
+todos os arquivos com nome terminado em .html sejam ignorados.
+
+Veja o exemplo abaixo, em que arquivos compilados aparecem quando git
+status é utilizado, e como ignorá-los usando o comando git ignore. O
+comando escreve em um arquivo .gitignore, que também será considerado
+pelo Git. É uma boa prática manter este arquivo sob controle de versão
+e, portanto, ele é adicionado e um novo commit criado.
+
+       ~/project$ git status
+       On branch master
+       Untracked files:
+         (use "git add <file>..." to include in what will be committed)
+
+               hello
+               hello.o
+
+       nothing added to commit but untracked files present (use "git add" to track)
+       ~/project$ git ignore '*.o' hello
+       Adding pattern(s) to: .gitignore
+       ... adding '*.o'
+       ... adding 'hello'
+       ~/project$ git status
+       On branch master
+       Untracked files:
+         (use "git add <file>..." to include in what will be committed)
+
+               .gitignore
+
+       nothing added to commit but untracked files present (use "git add" to track)
+       ~/project$ git add .gitignore
+       ~/project$ git status
+       On branch master
+       Changes to be committed:
+         (use "git reset HEAD <file>..." to unstage)
+
+               new file:   .gitignore
+       ~/project$ git commit -m "Acrescenta lista de arquivos a serem ignorados."
+       [master 8ba73db] Acrescenta lista de arquivos a serem ignorados.
+        1 file changed, 2 insertions(+)
+        create mode 100644 .gitignore
+       ~/project$ git status
+       On branch master
+       nothing to commit, working directory clean
+       ~/project$