Git para alunos de humanas (Parte I)

– Sou de humanas, não preciso aprender essas coisas. Bem, essa frase é muito repetida nos cursos de Ciências Sociais e Ciência Política que conheço. Mas essa realidade está mudando lentamente (ops!, rapidamente). Hoje não é mais novidade ouvir nos nossos corredores alguém falando em linguagens de programação como R e Python. Usar ferramentas adequadas para o trabalho é decisão que deve ser tomada cedo. Por isso, mesmo que você esteja apenas começando com R, Python, Latex ou outra linguagem, usar o Git para controlar as versões desses scripts será de grande ajuda.

Git, o quê?

Você já se viu na situação de ter várias cópias dos mesmos arquivos com nomes versao1, versao_modificada, versao_final, versao_final_correcoes, entre outros? Bem, o Git resolve esse pequeno problema mantendo a ultima versão disponível para edição enquanto lhe permite acessar ou recuperar versões anteriormente salvas. Por isso, o Git é um sistema de controle de versão. Mas ele faz muito mais que isso, recomendo que voçê acesse outros materiais sobre essa ferramenta. A documentação oficial é sempre uma boa pedida.

O Git tem uma série de comandos que te auxiliam a controlar todas as alterações dentro de um diretório específico. NOTA: o Git trabalha muito bem com arquivos de texto (plano) e não com binários. Por exemplo: seu .docx é um binário, seu .R ou .tex é um arquivo de texto plano. Você precisa inicializar o Git dentro de um diretório e dizer à ele quais arquivos vão ser alvos de seu controle. Vamos mostrar como fazer isso já já.

OBS: Eu assumo que você está usando alguma distribuição Linux, mas os comandos informados aqui funcionam da mesma forma em outros sistemas operacionais. Se seu sistema é suportado, recomendo que você baixe e instale o app do Github. Ele já vai configurar várias coisas para você.

Git: primeiros passos

Configurando a conta e o usuário

Precisamos configurar nossa conta para que o Git identifique qual ator alterou o arquivo (bem, o Git suporta que centenas de pessoas alterem o mesmo arquivo, ao mesmo tempo). Precisamos apenas do seu nome e email para que suas alterações sejam salvas com sua identificação. No seu terminal digite:

$ git config --global user.name "Nome Sobrenome"
$ git config --global user.email seuemail@provedor.com

Você tem certa liberdade para usar o nome e o email que quiser. Contudo, se você já sabe o que é GitLab e Github use as informações como cadastradas lá.

Comandos básicos

Escolha uma pasta onde você quer controlar a versão dos arquivos dentro dela. Na programação chamamos essa pasta de projeto. Se você usar o RStudio, crie sempre seus projetos com ele e ative o controle de versão: automaticamente uma pasta oculta .git será criada dentro do seu projeto. Mas o que foi feito, de fato? Você pode fazer isso manualmente.

Crie um projeto (diretório) chamado projetoX e adicione um arquivo chamado script.R dento dele. Entre na pasta e inicie o git dentro dela. No terminal seria algo como:

$ cd projetoX
$ git init

Agora o Git está olhando todos os arquivos dentro da sua pasta. Mas você vai precisar indicar para ele quais são os arquivos que você quer adicionar. Antes de qualquer coisa vamos ver como está sua área de trabalho:

$ git status

Sua àrea de trabalho é chamada de stage area e ela te mostra que ações você precisa realizar. Neste momento, precisamos adicionar o nosso arquivo ao controle do git. Para adicionar um arquivo script.R ao git você pode usar:

$ git add script.R

Mas você pode querer adicionar todos os arquivos de uma vez só (Esse ponto aí é bem importante):

$ git add .

Uma vez que você adicionou o arquivo você pode trabalhar com ele normalmente. Mas quando achar que você gostaria de salvar a versão atual precisa criar uma cópia desse arquivo. Você pode registrar essa versão com o Git, usando:

$ git commit -m "primeira versao do meu arquivo."

Adicionamos dois argumentos para o comando git: commit e -m. O primeiro significa “gravar as mudanças no repositório” e o segundo adiciona uma mensagem para que você entenda quais alterações você fez no arquivo. Quanto mais clara essa mensagem (-m, entendeu?), mais fácil você ou seus colaboradores saberem o que foi feito. Uma vez executado o comando, sempre que você quiser poderá acessar este arquivo nesse momento no tempo.

Vamos fazer um teste: altere o conteudo do arquivo, adicione-o ao git novamente e crie um novo commit para ele. Podemos fazer isso assim:

$ echo "library(ggplot2)" >> script.R
$ git add script.R
$ git commit -m "carregar pacote ggplot2"

Agora vamos ver quantos registros possuímos sobre esse arquivo:

$ git log

Deveria aparecer algo como isso aqui no seu terminal. Veja que os commits possuem identificadores numéricos (ID do commit). Serão eles as chaves usadas para voltar para cada uma das versões salvas. Ele também informa o autor que fez a alteração (provavelmente, seu nome e email configurados ali atrás) e a data. Finalmente, nossa mensagem de indentificação também está disponível.

Você pode ver quais são as diferenças entre as duas versoes do arquivo:

$ git diff

Existem muitas informações que não precisamos lidar agora: mas veja que suas alterações tem sinais de — ou +++ (os primeiros são remoções e o segundo são inserções). Além disso, podemos colorir a saida com a opção --colors-words. A cor verde significa inserção e vermelha alteração. Nesse caso, podemos controlar as alterações de modo bem prático. Não gostou das alterações feitas? Escolha o Id do commite na saída do comando git log --oneline e faça um checkout:

$ git log --oneline
$ git reset --hard <ID do Commit>
$ git push --force origin

Agora você tem a versão desejada do seu reposiório antes do seu erro. Note que existem muitas outras formas de fazer essa mesma operação, mas essa aí funciona em contextos mais complexos que o exemplo dado acima.

Considerações Finais

Tocamos em assuntos que não gostaria quando iniciei a escrever o post. Botamos o carro na frente dos bois e agora precisamos discutir coisas mais básicas do git (sniff). Daqui uns tempos eu completarei esse tutorial indo de forma mais devagar :).

OBS sobre atualizações do post

OBS: Essas páginas estão em estágio inicial de desenvolvimento. Sempre que possível irei alterá-las. Uma série de posts vão formar cursos específicos e a ordem do lançamento neste formato não será a mesma.