introR: introdução à linguagem R
14 de outubro de 2025
git config
git init
fork
e git clone
git status
, git add
e git commit
.gitignore
git log
e git show
git diff
git restore
, git revert
e git reset
git branch
, git switch
e git merge
git remote
, git push
e git pull
Pull request
R (>4.5.x)
https://www.r-project.org
RStudio (>2025.9.x)
https://www.rstudio.com
git (>2.34.x)
https://git-scm.com
Quem nunca…
Manejar projetos individualmente
Manejar projetos compartilhados
Manejar projetos no tempo
Principal ferramenta utilizada em grandes projetos
Cada vez mais necessário em colaborações
git
git
git
GitHub
GitHub
ATENÇÃO: dois conceitos!
ATENÇÃO: dois conceitos!
GitHub
Vamos criar uma conta no GitHub (caso não possuam)
GitHub
Salvem ou recuperem essas informações!
username: mauriciovancine
email: mauricio.vancine@gmail.com
senha: !@#$%¨&*+
Perfil
Perfil
Settings: superior direito > foto do perfil > Settings
Settings: superior direito > foto do perfil > Settings
Settings
Repositório
Repositório
README.md
README.md
Criar repositório: Perfil > Repositories > New
Criar um repositório
Criem uma página inicial para o perfil do GitHub
Criem uma página inicial para o perfil do GitHub
mauriciovancine
)README.md
nesse repositórioCriem um repositório de exemplo
teste
README.md
nesse repositórioREADME.md
RStudio
RStudio
Tools > Global Options > Git/SVN
RStudio
C:/Program Files/Git/bin/git.exe
/usr/bin/git
/usr/bin/git
RStudio
Chave SSH
GitHub
Perfil > Settings > SSH and GPG keys > New SSH key
GitHub
ctrl + v
)git
git config
: definir as configurações de usuário do gitctrl + shift + v
)Duas formas de trabalhar com o git e GitHub
git init
: inicia o versionamento de um repositório local
Diretório local
teste_local
setwd("teste_local")
)script.R
Diretório local
Terminal
do RStudioDiretório local
Terminal
do RStudioDiretório local
Terminal
do RStudioTerminal
, rodem: cd 'caminho/diretorio'
Terminal
, rodem: git init
Terminal
, rodem: git add -Av
Terminal
, rodem: git commit -m 'add script.R'
Terminal
, rodem: git restore script.R
Fork: cópia de um repositório para o seu repositório (GitHub)
Forkar um diretório remoto
syllabus-text
da disciplinaAgora esse repositório, que estava no meu GitHub, foi copiado (“garfado”) para o GitHub de vocês
usuario/teste
que vocês criaramClonar: download de um repositório remoto (e.g. GitHub) para o seu repositório local (computador)
git clone
: download de um repositório remoto (e.g. GitHub) para o seu repositório local (computador)
Primeiro, vamos criar uma pasta chamada github
Criar um Projeto R com controle de versão
File > New Project > Version Control
Escolher clonar repositório do GitHub
Git
Preencher com dados do repositório do GitHub
Repository URL
Preencher:
git@github.com:mauriciovancine/teste.git
preenchimento automático
/home/mude/data/github
Comandos git para o fluxo de trabalho dos repositórios
Fluxo do versionamento
Fluxo do versionamento
Fluxo do versionamento usando fotos (working tree)
Fluxo do versionamento usando fotos (git add
)
Fluxo do versionamento usando fotos (git commit
)
Rastreamento dos arquivos no diretório de trabalho
Quatro estados de alteração dos arquivos
git add
) para o commitIMPORTANTE!
git add
) se tornam stagedgit add
) se tornam stagedgit commit
, todos os arquivos se tornam unmodifiedusuario/teste
Terminal do RStudio
Terminal do RStudio
Tools > Terminal > New Terminal (alt + shift + r)
git status
: mostra o estado do repositório
Vamos criar um arquivo no diretório
Usando a aba Terminal do RStudio
git status
: mostra o estado do repositório
git add [file]
: adiciona mudanças após edições (staging area) [Index]
git add -v [file]
: adiciona mudanças após edições (staging area) [Index]
git add -Av
: adiciona todas mudanças após edições (staging area) [Index]
git add .
: adiciona todas mudanças após edições (staging area) [Index]
git status
: mostra o estado do repositório
git commit
: registra as alterações da staging area no repository [HEAD]
git commit -m "[mensagem]"
: registra as alterações da staging area no repository com uma mensagem [HEAD]
git status
: mostra o estado do repositório
Fluxo do versionamento
Usando a aba Files do RStudio, vamos abrir e editar o arquivo teste.txt
git status
: mostra o estado do repositório
git add
: adiciona mudanças após edições na staging area [Index]
git status
: mostra o estado do repositório
git commit -m "[mensagem]"
: registra as alterações da staging area no repository com uma mensagem [HEAD]
git status
: mostra o estado do repositório
Artwork by @allison_horst
Artwork by @allison_horst
ATENÇÃO!
Corrigir mensagens de commit
Fluxo do versionamento
Fluxo do versionamento
Artwork by @allison_horst
git e commits
.gitignore
Arquivo especial que indica ao git que determinados arquivos ou diretórios devem ser ignorados no versionamento
Arquivo de texto simples em que cada linha especifica um padrão de arquivos ou diretórios a serem ignorados
Geralmente colocado no diretório raiz de um repositório
Atentar para o ponto, pois é um arquivo oculto [.gitignore
]
.gitignore
.gitignore
git log
: histórico dos commits
hash
hash curto
Referenciar um commit usando apenas os primeiros caracteres do hash
Utilizamos esse identificador em várias operações no git
Por exemplo:
3a4f9b7
3a4f9b7c19e2f4e1a0de9b7e5c6aebd7d5d85792
HEAD
git log
: histórico dos commits
$ git log
# commit dfefc8530b25bfe96d8ccf7ba74aa0858ade6346 (HEAD -> master)
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Sat May 31 18:22:19 2025 -0300
# modificação do teste.txt
# commit 5a164d55896d6251249a5142f6110e8e0b06a49b
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Fri May 30 09:53:55 2025 -0300
# add teste.txt
# commit 50c520ff2cd531f1652eafb4654a9fb3fcd196af
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Thu May 29 09:34:13 2025 -0300
# first commit
git log [file]
: histórico dos commits para arquivos
$ git log teste.txt
# commit dfefc8530b25bfe96d8ccf7ba74aa0858ade6346 (HEAD -> master)
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Sat May 31 18:22:19 2025 -0300
# modificação do teste.txt
# commit 5a164d55896d6251249a5142f6110e8e0b06a49b
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Fri May 30 09:53:55 2025 -0300
# add teste.txt
git log --oneline
: histórico dos commits simplificado
git log --graph
: histórico dos commits em grafo
$ git log --graph
# * commit dfefc8530b25bfe96d8ccf7ba74aa0858ade6346 (HEAD -> master)
# | Author: mauriciovancine <mauricio.vancine@gmail.com>
# | Date: Sat May 31 18:22:19 2025 -0300
# |
# | modificação do teste.txt
# |
# * commit 5a164d55896d6251249a5142f6110e8e0b06a49b
# | Author: mauriciovancine <mauricio.vancine@gmail.com>
# | Date: Fri May 30 09:53:55 2025 -0300
# |
# | add teste.txt
# |
# * commit 50c520ff2cd531f1652eafb4654a9fb3fcd196af
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Thu May 29 09:34:13 2025 -0300
#
# first commit
git log --grep
: faz uma busca no histórico dos commits
git log --author
: filtra o histórico dos commits por autor
$ git log --author="mauricio"
# commit dfefc8530b25bfe96d8ccf7ba74aa0858ade6346 (HEAD -> master)
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Sat May 31 18:22:19 2025 -0300
#
# modificação do teste.txt
#
# commit 5a164d55896d6251249a5142f6110e8e0b06a49b
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Fri May 30 09:53:55 2025 -0300
#
# add teste.txt
#
# commit 50c520ff2cd531f1652eafb4654a9fb3fcd196af
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Thu May 29 09:34:13 2025 -0300
git log
: cheatsheet
git show
: detalhes de um commit
$ git show
# commit dfefc8530b25bfe96d8ccf7ba74aa0858ade6346 (HEAD -> master)
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Sat May 31 18:22:19 2025 -0300
#
# modificação do teste.txt
#
# diff --git a/teste.txt b/teste.txt
# index e69de29..f5201c0 100644
# --- a/teste.txt
# +++ b/teste.txt
# @@ -0,0 +1 @@
# +Acabo de inserir uma edição ao meu arquivo
# \ No newline at end of file
git show [hash]
: detalhes de um commit específico
git show [file]
: detalhes de um arquivo específico
$ git show teste.txt
# commit dfefc8530b25bfe96d8ccf7ba74aa0858ade6346 (HEAD -> master)
# Author: mauriciovancine <mauricio.vancine@gmail.com>
# Date: Sat May 31 18:22:19 2025 -0300
#
# modificação do teste.txt
#
# diff --git a/teste.txt b/teste.txt
# index e69de29..f5201c0 100644
# --- a/teste.txt
# +++ b/teste.txt
# @@ -0,0 +1 @@
# +Acabo de inserir uma edição ao meu arquivo
# \ No newline at end of file
git diff
: diferenças realizadas em um repositório
git restore
: desfaz alterações na working tree ou staging areagit revert
: desfaz commits, mas preserva o histórico (criando outro commit)git reset
: desfaz commits, mas deleta o histórico (deletando commits)
Cuidado: essas operações podem ser irreversíveis
Branch (ou ramo) é uma linha paralela de desenvolvimento
Funções:
main
ou master
)Importante!
git add
e git commit
) fazem parte da branchgit branch
: listar as branches e verificar a branch de edição (*
)
main
para a branch principal para adotar uma linguagem mais inclusiva, clara e alinhada com os padrões de desenvolvimentomaster
main
git branch [nome-branch]
: criar uma branch
git switch [nome-branch]
: trocar a branch de edição
git branch
: lista os branches e verifica a branch de edição
git switch -c [nome-branch]
: criar e mudar para a nova branch
git branch
: lista os branches e verifica a branch de edição
git branch -m [novo-nome]
: renomear uma branch de edição
git branch -m [nome-antigo] [novo-nome]
: renomear uma branch
git branch -d [nome]
: deletar uma branch
Vamos criar um arquivo no diretório e na branch-2
git switch
: trocar a branch de edição
git switch
: trocar a branch de edição
git merge
: mescla as branches em uma única branch
git merge
: mescla as branches em uma única branch
git merge
: mescla as branches em uma única branch
Artwork by @allison_horst
Git Branch Cheatsheet
git remote
: gerencia conexões com repositórios remotos (GitHub)
origin
: nome padrão para o repositório remoto principalgit remote
: gerencia conexões com repositórios remotos (GitHub)
origin
git@github.com:mauriciovancine/teste.git
fetch
: endereço para buscar atualizações do repositório remotopush
: endereço para enviar suas alterações para o repositório remotogit remote add
: adiciona ligação com um repositório remoto (GitHub)
git push
: envia suas alterações (commits) feitas localmente para o repositório remoto (GitHub)
git push
: envia suas alterações (commits) feitas localmente para o repositório remoto (GitHub)
Função:
git push
: envia suas alterações (commits) feitas localmente para o repositório remoto (GitHub)
git push
: envia suas alterações (commits) feitas localmente para o repositório remoto (GitHub)
$ git push -u origin main
# Enumerating objects: 41, done.
# Counting objects: 100% (41/41), done.
# Delta compression using up to 12 threads
# Compressing objects: 100% (35/35), done.
# Writing objects: 100% (35/35), 4.99 MiB | 155.00 KiB/s, done.
# Total 35 (delta 6), reused 0 (delta 0), pack-reused 0
# remote: Resolving deltas: 100% (6/6), completed with 6 local objects.
# To github.com:mauriciovancine/course-geospatial-data-r.git
# accc9db..8f70e96 master -> master
Em caso de incêndio…
CUIDADO: muitas vezes há conflitos que precisam ser revolvidos entre o repositório local e o remoto
Limites de tamanho
git fetch
: busca atualizações do repositório remoto e as traz para o repositório local, mas não altera a branch atual
Função:
git fetch
: busca atualizações do repositório remoto e as traz para o repositório local, mas não altera a branch atual
$ git fetch origin
# remote: Enumerating objects: 4, done.
# remote: Counting objects: 100% (4/4), done.
# remote: Compressing objects: 100% (2/2), done.
# remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
# Unpacking objects: 100% (3/3), 934 bytes | 934.00 KiB/s, done.
# From github.com:mauriciovancine/teste
# 4029d2c..dfb960b main -> origin/main
git fetch
: busca atualizações do repositório remoto e as traz para o repositório local, mas não altera a branch atual
git merge
: para mesclar manualmentegit rebase
: para reescrever o histórico de forma linear (evitar)git pull
: busca atualizações do repositório remoto e as traz para o repositório local, alterando a branch atual
git pull
: busca atualizações do repositório remoto e as traz para o repositório local, alterando a branch atual
git fetch
+ git merge
Resumo
Pull Request
: solicita que o repositório remoto original (GitHub) aceite (pull - ‘puxe’) as alterações realizadas do fork
Fluxo de trabalho de um Pull Request
git add
e git commit
)git pull
)Pull Request
)Pull Request
: solicita que o repositório central (remoto) aceite (pull - ‘puxe’) as alterações realizadas do nosso fork
Pull Request
: solicita que o repositório central (remoto) aceite (pull - ‘puxe’) as alterações realizadas do nosso fork
Pull Request
: solicita que o repositório central (remoto) aceite (pull - ‘puxe’) as alterações realizadas do nosso fork
Pull Request
: solicita que o repositório central (remoto) aceite (pull - ‘puxe’) as alterações realizadas do nosso fork
Artwork by @allison_horst
Conflitos no repositório local
Conflitos no rep. local vindos de um rep. remoto
Conflitos surgem quando o git não consegue decidir qual alteração manter:
Situação | Exemplo |
---|---|
Mesma linha alterada | Duas pessoas editam a mesma linha de um arquivo e depois mesclar as mudanças |
Remoção e modificação | Em uma branch o arquivo é removido, em outra o arquivo foi alterado |
Edição de arquivos renomeados | Arquivos foram renomeados em uma branch e editados em outra |
Como o Git detecta conflitos
O Git compara três versões do arquivo:
Possibilidade 1: se as mudanças forem em regiões diferentes do arquivo, o git mescla automaticamente
Possibilidade 2: se as mudanças forem conflitantes (e.g. mesma linha), o git marca um conflito
<<<<<<< HEAD
: início do trecho com a versão atual (na sua branch)=======
: separador entre as versões>>>>>>> nome-da-branch
: fim do conflito, mostrando de qual branch veio a outra versãoSolução
<<<<<<<
e >>>>>>>
<<<<<<<
, =======
, >>>>>>>
)Agradecimento à Beatriz Milz pelas figuras surrupiadas (eu pedi…)
Git Panel
Git Panel - Detalhes
Git Panel - Branches
Git Panel - Diff - Changes: Revisar mudanças
Git Panel - Diff - History: Histórico de mudanças
Git pane - Staged
Git pane - Staged e File status
Git pane - Commit
Git pane - Commit
Git pane - Push e Pull
Git Cheat Sheet
usethis
Comandos direto no R para criar e versionar repositórios
gitKraken
Sublime Merge
Curso de Git - Bóson Treinamentos
Git e Github para iniciantes - Willian Justen de Vasconcellos
Curso de Git - Professor Aquino