introR: introdução à linguagem R
14 de outubro de 2025
git configgit initfork e git clonegit status, git add e git commit.gitignoregit log e git showgit diffgit restore, git revert e git resetgit branch, git switch e git mergegit remote, git push e git pullPull 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
testeREADME.md nesse repositórioREADME.mdRStudio
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 keyGitHub
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_localsetwd("teste_local"))script.RDiretório local
Terminal do RStudioDiretório local
Terminal do RStudioDiretório local
Terminal do RStudioTerminal, rodem: cd 'caminho/diretorio'Terminal, rodem: git initTerminal, rodem: git add -AvTerminal, rodem: git commit -m 'add script.R'Terminal, rodem: git restore script.RFork: 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.gitpreenchimento 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 commit
IMPORTANTE!
git add) se tornam stagedgit add) se tornam stagedgit commit, todos os arquivos se tornam unmodified
usuario/testeTerminal 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:
3a4f9b73a4f9b7c19e2f4e1a0de9b7e5c6aebd7d5d85792HEAD
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 commitgit 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.txtgit 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 commitgit 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 -0300git 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 filegit 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 filegit 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 desenvolvimentomastermaingit 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)
origingit@github.com:mauriciovancine/teste.gitfetch: 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 -> masterEm 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/maingit 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 mergeResumo
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
