git ready

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

adicionando trechos de código

publicado em 15 Jan 2009

Esse é um follow up dos comentários do artigo de ontem sobre adicionar interativamente. Leitores que estão começando a conhecer o poder do git add -p, um atalho para o modo de patch da adição interativa. Esse comando é capaz de quebrar modificações de arquivo em trechos menores para que você possa fazer commit exatamente do que você quer, e não de todo o arquivo.

Esse comportamento é muito útil pois lhe permite versionar qualquer “trecho” de texto em um arquivo que você quiser. Talvez uma linha de código possa quebrar em outras máquinas ou no servidor, mas não na sua. Ou algo assim.

Agora vamos para um exemplo de uso, fazendo alterações para nosso arquivo README novamente. Aqui o que o git diff nos retorna referente as modificações que foram feitas:

diff --git a/README.md b/README.md
index 2556dae..45d8b6e 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,14 @@
> Há apenas um modo...
> ~ Henry Van Dyke
   
+# Informações do projeto
+
+Blah blah blah...
+
# Gostaria de contribuir?

Se você tiver idéias sobre...
+
+# Sobre
+
+Esse blog é fantástico!

Então, como pode ver, nós fizemos mofificações em partes separadas do arquivo. No entanto, eu quero fazer um commit da parte de baixo. Além disso, quem precisa de documentação? Digite:

git add -p

Rode isso e você receberá um prompt parecido com o do git add -i, mas com algumas outras opções:

Stage this hunk [y/n/a/d/s/e/?]? ?
y - colocar esse trecho no stage
n - não colocar esse trecho no stage
[... removendo alguns ...]
s - dividir o trecho atual em trechos menores
e - editar esse trecho manualmente
? - imprimir o help

A maioria é auto-explicativa, mas vamos para a mais divertida. O que nós realmente queremos é a opção s, que irá dividir o arquivo em dois trechos de código menores, um com a parte para o bloco de cima “Informações do projeto” e outro para o bloco “Sobre”. Uma vez que dividido ele irá mostrar para você apenas as mudanças para aquele trecho:

Split into 2 hunks.
@@ -1,6 +1,10 @@
> Há apenas um modo...
> ~ Henry Van Dyke

+# Informações do projeto
+
+Blah blah blah...
+
# Gostaria de contribuir?

Se você tiver ideias sobre...
Stage this hunk [y/n/a/d/j/J/e/?]? n

A partir daque nós podemos ignorar isso com n, e ir para o próximo e adicionar com Y:

@@ -4,3 +8,7 @@
# Gostaria de contribuir?

Se você tiver idéias sobre...
+
+# Sobre
+
+Esse blog é fantástico!
Stage this hunk [y/n/a/d/K/e/?]? y

Dando um git status você verá as modificações prontas para o commit e as modificações que estão na área de stage no mesmo arquivo. Estranho, mas isso faz sentido: colocamos no stage metade das mudanças, e a outra metade ainda não foi adicionada.

Há tambem a opção e, que permite a você inverter manualmente as fatias de código no seu editor favorito. Instruções são incluídas com essa opção, então brinque com isso quando tiver a chance. (Sem trocadilhos.)

Se você tiver qualquer história sobre como o git add -p ajudou você (ou se alguma característica interessante foi deixada para trás), poste nos comentários!

(Este artigo foi generosamente traduzido por Willian Molinari)