Git é o software de controle de versões mais utilizado na atualidade. Ele permite seguir as diferentes versões de seus arquivos no computador ao longo do tempo. Cada momento onde o usuário decide criar uma versão é chamado de commit. A diferença do trabalho em Dropbox (por exemplo) cada commit é um momento discreto e decidido pelo usuário. Não há uma atualização contínua. Isto permite saber/decidir quais são as modificações relevantes e separar o trabalho em etapas.
Um repositório de git é uma pasta onde a última versão de cada arquivo está visível, porém o historial inteiro de commits dos arquivos está disponível, pode ser explorado, revertido. Com git o usuário sabe o que foi acrescentado, modificado, apagado em cada commit, e portanto não precisa criar versões duplicadas de arquivos, ou renomear ao longo do trabalho.
Git funciona localmente, mas também permite estabelecer repositórios remotos. Isto permite trabalhar desde diferentes computadores, com diferentes usuários e ter um backup no remoto. Nesse sentido, fala-se que git é um sistema distribuído de controle de versões, onde a perda de um computador ou usuário “central” não implica na perda do trabalho inteiro.
Na atualidade, GitHub (www.github.com) é o sistema de armazenamento de repositórios de git mais conhecido e utilizado. No entanto, as instituições podem implementar servidores para que eles sirvam como remotos, e há outros serviços similares, como Gitlab (www.gitlab.com, nosso favorito <3) e Bitbucket (www.bitbucket.com).
Git pode ser usado em qualquer pasta do computador e é um sistema independente do fluxo de trabalho em R. Ele foi desenvolvido por Linus Torvalds para poder colaborar com os diferentes autores de linux e para poder trabalhar offline (entre commits). Neste tutorial vamos configurar o computador para que os projetos de análise de dados consigam aproveitar as vantagens de git e os fluxos de trabalho fiquem mais organizados.
Este tutorial está inspirado no curso de R da Page Piccinini
Primeiro vamos fazer a configuração de git no computador. Para isto abra uma janela de terminal no RStudio.
Todo comando de git no terminal começa por git ;) Vamos inserir nome e o email para identificação:
Digite: git config --global user.name
git config --global user.email
A primeira vez nada deve aparecer, se algo aparecer é porque já tinha sido rodado.
Se não tiver resposta ou se houver algum erro no retorno, execute:
git config --global user.name [seu nome]
git config --global user.email [seu email do github!]
ex. git config --global user.name "Andrea Sánchez-Tapia" ex. git config --global user.email katori@gmail.com
As aspas no nome permitem que git entenda que o nome completo com espaços é o user.name.
Na checagem, os dados inseridos devem aparecer, digite de novo: git config user.name
git config user.email
As variáveis que você inseriu devem aparecer
Até aqui git está configurado no computador e ele sabe quem é você.
Tem vários caminhos para criar o repositório local de git que consiga se comunicar remotamente com GitHub, GitLab ou Bitbucket. Neste caso, já temos uma pasta local portanto precisamos apenas iniciar git localmente e criar um repositório remoto e adicioná-lo localmente.
Em outros fluxos de trabalho, você pode querer criar o repositório diretamente no GitHub e clonar ele para seu computador, e só adicionar conteúdo posteriormente.
Em geral, leia as instruções disponíveis nos serviços de hospedagem :) Os helps de GitHub, GitLab e Bitbucket (Atlassian) são de muita utilidade.
git statusisto ainda não é um repositório de git:
fatal: not a git repository (or any of the parent directories): .git
git initInitialized empty Git repository in /Users/andreasancheztapia/Desktop/projeto_area_de_trabalho/.git/
git remote -v Nada, não é?Vamos criar e adicionar um repositório remoto criado no GitHub
Lembre sempre de checar:
git status
Neste momento a mensagem no terminal deveria ser:
On branch master
No commits yet
Untracked files:...
Vamos fazer uma modificação ao README.md, adicionar as mudanças (add), fazer commit (commit) e fazer push (push).
Edite seu README.md de maneira interessante e significativa -
Adicione seu README.md: isto quer dizer que o git vai começar a monitorar este arquivo.
git add README.md
Faça sempre git status entre passos para entender o que está acontecendo
git commit -m "eu fiz as mudanças porque era bom"
[master b9cdaf7] eu fiz as mudanças porque era bom
1 file changed, 1 insertion(+)
VOCÊ SÓ PRECISA FAZER ISTO UMA VEZ EM CADA COMPUTADOR
Para isso, geramos uma chave de segurança que identifica o computador e copiamos ela no GitHub.
Esta chave é para cada computador individual. Você pode ter uma conta de GitHub só mas trabalhar em diferentes computadores, e cada um terá a própria chave.
Preferências > git/svngit.exe em windows, em mac e linux /usr/bin/gitCriar RSA Key. Se já tiver algo, passe para o passo seguinte.Até aqui github e seu computador podem se comunicar :D Esta configuração da chave só precisa ser feita uma vez em cada computador. O resto precisa ser rodado toda vez que você crie um repositório
A gente vai adicionar o remoto, copie a opção SSH do quadro de cima
git@github.com:AndreaSanchezTapia/blah.git
Volte para o terminal local e adicione este remoto:
git remote add origin + cole o conteúdo com ctrl + v
git remote add origin git@github.com:AndreaSanchezTapia/blah.git
Você acaba de adicionar o remoto que criou no GitHub
Cheque se este existe:
git remote -v
A resposta deve ser algo similar a isto:
$ origin git@github.com:AndreaSanchezTapia/blah.git (fetch)
$ origin git@github.com:AndreaSanchezTapia/blah.git (push)
Até aqui você tem um remoto e um repositório local
git push -u origin master
O -u marca um “upstream”: qualquer mudança no remoto pode ser recuperada localmente
A mensagem de push deve ser similar a esta:
Warning: Permanently added the RSA host key for IP address '18.228.52.138' to the list of known hosts. Enumerating objects: 5, done.
Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 313 bytes | 313.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:AndreaSanchezTapia/blah.git
af45751..b9cdaf7 master -> master
Faça mais uma edição no README.md e repita os passos 2 a 4: add, commit, push