3 ## Diretório de trabalho, índice, status
5 Ao trabalhar com Git, os arquivos estarão em um diretório de trabalho. O
6 Git é capaz de identificar os arquivos que estão sob seu controle, suas
7 mudanças, arquivos novos e removidos. Um dos comandos para obter essas
8 informações é git status.
10 Ao remover um arquivo, adicionar um segundo arquivo, e modificar um
11 terceiro, a saída de git status é a seguinte:
15 Changes not staged for commit:
16 (use "git add/rm <file>..." to update what will be committed)
17 (use "git checkout -- <file>..." to discard changes in working directory)
23 (use "git add <file>..." to include in what will be committed)
27 no changes added to commit (use "git add" and/or "git commit -a")
30 Note que há uma lista de alterações que não estão prontas para o commit,
31 e uma lista de arquivos não rastreados.
33 O comando git commit apenas grava as alterações que foram adicionadas
34 para o commit. No caso da remoção de um arquivo, o comando git rm deve
37 ~/project$ git rm INSTALL
41 Changes to be committed:
42 (use "git reset HEAD <file>..." to unstage)
47 Com a utilização de git rm, a remoção do arquivo não só é refletida no
48 diretório de trabalho, como também se reflete no índice, também chamado
49 de index. O índice é uma área em que são registradas as mudanças a serem
50 realizadas em um próximo commit. A distinção da área de trabalho e do
51 índice permite que modificações sejam postergadas, como novos arquivos
52 criados antes de estarem prontos para um commit.
54 Para adicionar alterações ou novos arquivos ao índice, o comando git add
57 ~/project$ git add AUTHORS
60 Changes to be committed:
61 (use "git reset HEAD <file>..." to unstage)
67 A opção -a do comando git commit adiciona as alterações e remoções ao
68 índice para o commit, mas não adiciona novos arquivos, que devem ser
69 adicionados com o comando git add.
71 ## Diferenças entre diretório de trabalho, índice e HEAD
73 Para exibir a diferença entre o diretório de trabalho e o índice, pode
74 ser utilizado o comando git diff.
77 diff --git a/INSTALL b/INSTALL
78 index e69de29..3924362 100644
82 +# Instruções de instalação
85 Ao adicionar as alterações ao índice, git diff não mostrará nenhuma
88 ~/project$ git add INSTALL
92 Note que as alterações ainda não foram gravadas com um commit. Para
93 verificar as diferenças entre o índice e o último commit, também chamado
94 HEAD, use a opção --cached de git diff.
96 ~/project$ git diff --cached
97 diff --git a/INSTALL b/INSTALL
98 index e69de29..3924362 100644
102 +# Instruções de instalação
105 Algumas vezes, a intenção ao utilizar git diff é comparar o diretório de
106 trabalho com o último commit, independente das alterações presentes no
107 índice. Para tanto, deve ser especificado o parâmetro HEAD para o
110 ~/project$ git diff HEAD
111 diff --git a/INSTALL b/INSTALL
112 index e69de29..3924362 100644
116 +# Instruções de instalação
119 ## Ignorando arquivos
121 Em muitas situações, arquivos são gerados a partir de outros, como no
122 caso de programas compilados ou minificados. Como boa prática, tais
123 arquivos não são mantidos em controle de versão, mas devem ser gerados
124 de forma automática e reprodutível.
126 No entanto, tais arquivos, assim como outros arquivos temporários ou
127 gerados pelo sistema operacional podem aparecer constantemente na saída
128 de git status e outros comandos. Isso dificulta a leitura da saída
129 destes comandos e pode ser evitado com o uso de git ignore.
131 Seja através do comando git ignore ou editando diretamente o arquivo
132 .gitignore, é possível instruir o git a ignorar arquivos que
133 correspondam a um padrão. O padrão *.html, por exemplo, faz com que
134 todos os arquivos com nome terminado em .html sejam ignorados.
136 Veja o exemplo abaixo, em que arquivos compilados aparecem quando git
137 status é utilizado, e como ignorá-los usando o comando git ignore. O
138 comando escreve em um arquivo .gitignore, que também será considerado
139 pelo Git. É uma boa prática manter este arquivo sob controle de versão
140 e, portanto, ele é adicionado e um novo commit criado.
142 ~/project$ git status
145 (use "git add <file>..." to include in what will be committed)
150 nothing added to commit but untracked files present (use "git add" to track)
151 ~/project$ git ignore '*.o' hello
152 Adding pattern(s) to: .gitignore
155 ~/project$ git status
158 (use "git add <file>..." to include in what will be committed)
162 nothing added to commit but untracked files present (use "git add" to track)
163 ~/project$ git add .gitignore
164 ~/project$ git status
166 Changes to be committed:
167 (use "git reset HEAD <file>..." to unstage)
170 ~/project$ git commit -m "Acrescenta lista de arquivos a serem ignorados."
171 [master 8ba73db] Acrescenta lista de arquivos a serem ignorados.
172 1 file changed, 2 insertions(+)
173 create mode 100644 .gitignore
174 ~/project$ git status
176 nothing to commit, working directory clean