SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
GIT Source Control 
GLUA - Sessão Livre 
Ilan Pegoraro 
Igor Duarte Cardoso 
12/03/2014
História 
● Criado por Linus Torvalds em 2005; 
● Controlo de versões distribuído; 
● Multi-plataforma (Unix-like, Windows, etc.); 
● Interface de linha de comandos, no entanto 
existem várias alternativas gráficas: 
○ gitk; 
○ tig (linha de comandos mas usa n-curses); 
○ Integração com IDEs; 
○ Source-tree (OS X e Windows). 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Inicialização do repositório 
Criação de um repositório local no diretório atual (pasta .git): 
● $ git init 
Sessão livre sobre GIT 
● $ git clone <url> 
Grupo Linux da Universidade de Aveiro
.gitignore 
É um ficheiro utilizado para especificar outros ficheiros que o git deve ignorar. 
Sintaxe: 
● Cada linha especifica uma regra; 
● Shell globbing; 
● # para comentários; 
● O caráter ! no início da linha inverte o sentido da regra; 
● Recursivo (regras são aplicadas a partir do diretório actual). 
Nota: Só funciona para os ficheiros que o git não esteja a seguir, caso contrário 
é preciso removê-los com git rm <ficheiro>. 
Sessão livre sobre GIT 
Grupo Linux da Universidade de Aveiro
.gitignore 
<linha em branco> 
# comentário... não é reconhecido como regra 
*.class 
*.jar 
!lib/MyPrecious.jar 
*~ 
src/Test.java 
build/ 
Sessão livre sobre GIT 
Exemplo: 
Grupo Linux da Universidade de Aveiro
git config 
Permite configurar opções do repositório ou opções globais, como: 
● Editor; 
● Dados do autor; 
● Interface com cores. 
$ git config core.editor vim 
$ git config color.ui true 
$ git config user.name Glua 
$ git config user.email “glua@ua.pt” 
Nota: Para remover basta usar a flag --unset 
$ git config --unset … 
Nota 2: Para configurações globais basta usar a flag --global. 
$ git config --global … 
Sessão livre sobre GIT 
Grupo Linux da Universidade de Aveiro
Adicionar um ficheiro 
git add permite adicionar um ficheiro à staging area. 
$ git add Main.java 
Nota: Após esta ação, o git irá criar um objeto na 
armazém de objetos que corresponde aos ficheiros 
criados e/ou alterados. Tecnicamente, as alterações 
são guardadas em disco. 
$ git status $ tree .git/objects 
Sessão livre sobre GIT 
Grupo Linux da Universidade de Aveiro
Staging Area 
● É a área que permite organizar um commit antes de o escrever no histórico 
do projeto; 
● Serve para o git não estar continuamente a manipular o repositório. 
# On branch master 
# Changes to be committed: 
# 
# new file: MyClass.java 
# 
# Changes not staged for commit: 
# 
# modified: Main.java 
# 
# Untracked files: 
# 
# Main.class 
Nota: para remover um ficheiro da staging area, git rm --cached <ficheiro> 
Sessão livre sobre GIT 
Grupo Linux da Universidade de Aveiro
Mensagem de commit (opcional) 
...mas recomendado! 
Titulo 
<linha em branco> 
Corpo da messagem... 
As mensagens de commit do git têm um formato de conveniência, contudo não 
é obrigatório segui-lo. 
Nota: consultem as boas práticas para mensagens de commit: 
http://sethrobertson.github.io/GitBestPractices/ 
Sessão livre sobre GIT 
Grupo Linux da Universidade de Aveiro
Guardar alterações (commit) 
git commit cria um novo objeto (commit object) com conteúdo da staging 
area e atualiza as referências HEAD e master. 
● ID - função hash (sha1) de: 
○ Conteúdo; 
○ Autor; 
○ Data; 
○ Mensagem de log; 
○ ID do commit antigo. 
$ git commit 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Guardar alterações (commit) 
$ git add Main.java 
$ git commit 
HEAD master 
$ git add MyClass.java ... $ git commit 
Sessão livre sobre GIT 
A 
HEAD 
B 
master 
A 
HEAD master 
A 
Grupo Linux da Universidade de Aveiro
Manipulação de ficheiros 
● git rm <fich> 
○ Remove o ficheiro do repositório; 
● git rm --cached <fich> 
○ Remove o ficheiro do repositório quando já foi adicionado; 
● git mv <antigo> <novo> 
○ Altera o nome do ficheiro <antigo> por <novo>; 
○ git é tão inteligente que detecta a alteração do nome do ficheiro, 
mesmo sem usar o comando git mv. 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Consulta de commit 
git log permite visualizar a listagem de todos os commits existentes no 
repositório. 
$ git log 
$ git log --graph --decorate 
$ git log --stat 
$ git log <fim>..<inicio> 
$ git shortlog 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Ramos 
git branch cria uma nova linha de desenvolvimento. 
● São armazenados em .git/refs/heads 
Isolamento Trabalho Atualização Integração 
$ git branch feature 
HEAD master 
A 
Sessão livre sobre GIT 
feature 
B 
Grupo Linux da Universidade de Aveiro
Ramos 
Sessão livre sobre GIT 
● Permanent Branches 
○ Ramo de integração, por exemplo master; 
○ Ramo de desenvolvimento, por exemplo develop; 
○ Persistem no repositório. 
● Topic Branches 
○ Surgem dois tipos: hotfixes, feature (por convenção); 
○ São utilizados para corrigir falhas ou desenvolver pequenas 
funcionalidades. 
Dicas 
Nota: git flow simplifica a utilização deste modelo de branching. 
http://nvie.com/posts/a-successful-git-branching-model/ 
Grupo Linux da Universidade de Aveiro
Ramos 
git checkout atualiza os ficheiros do diretório de trabalho com a versão 
existente na base de dados referente ao ramo pretendido. 
Nota: git checkout -b <branch> cria o ramo e faz checkout para o 
mesmo. 
$ git checkout feature 
HEAD 
A 
Sessão livre sobre GIT 
feature master 
B 
Grupo Linux da Universidade de Aveiro
Ramos 
git checkout atualiza os ficheiros do diretório de trabalho com a versão 
existente na base de dados referente ao ramo pretendido. 
Nota: git checkout -b <branch> cria o ramo e faz checkout para o 
mesmo. 
$ git checkout feature 
HEAD master 
A 
Sessão livre sobre GIT 
feature 
B 
Grupo Linux da Universidade de Aveiro
Ramos 
git checkout pode ainda ser usado para atualizar os ficheiros do diretório 
de trabalho para um determinado commit do histórico, temporariamente. 
$ git checkout c02293177dd5db9d458f20a6fd27bf8849d0c01f 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Ramos 
git branch também permite visualizar os ramos existentes no repositório 
# mostra os ramos locais 
$ git branch 
# mostra os ramos remotos 
$ git branch -r 
# mostra todos os ramos 
$ git branch -a 
# remove o ramo 
$ git branch -d feature 
# força a remoção do ramo cuidado! 
$ git branch -D feature 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Ramos 
Sessão livre sobre GIT 
A 
master HEAD 
B 
feature 
C D 
após commits em feature 
Grupo Linux da Universidade de Aveiro
Ramos 
B 
Sessão livre sobre GIT 
após commits em master 
A 
HEAD master 
feature 
C D 
E 
$ git checkout master 
Grupo Linux da Universidade de Aveiro
Merging 
Merging é o processo de integrar commits de um ramo noutro. 
● fast-forward merge; 
● 3-way merge; 
● Octopus. 
Todas as estratégias utilizam o comando git merge. 
● A estratégia utilizada é detectada automaticamente pelo git. 
$ git checkout master 
$ git merge feature 
Nota: O merge é feito no ramo master, deixando o outro inalterado. 
Sessão livre sobre GIT 
Grupo Linux da Universidade de Aveiro
Merging 
Fast-forward merge 
$ git checkout master 
Sessão livre sobre GIT 
A 
HEAD 
master 
B 
feature 
C D 
Grupo Linux da Universidade de Aveiro
Merging 
Fast-forward merge 
$ git merge feature 
Sessão livre sobre GIT 
A 
HEAD 
master 
B 
feature 
C D 
Grupo Linux da Universidade de Aveiro
Merging 
3-way merge 
$ git checkout master 
Sessão livre sobre GIT 
A 
master 
B 
feature 
C D 
E 
HEAD 
Grupo Linux da Universidade de Aveiro
Merging 
3-way merge 
$ git merge 
Sessão livre sobre GIT 
A 
master 
B 
feature 
C D 
E 
HEAD 
F 
Grupo Linux da Universidade de Aveiro
Conflitos 
Ao fazer o merge podem surgir conflictos entre alterações ao mesmo ficheiro. 
● $ git checkout --ours Main.java 
○ Checkout do nosso ficheiro, ignorando as alterações feitas por outros; 
● $ git checkout --theirs Main.java 
○ Checkout do ficheiro alterado por outros, ignorando as nossas 
alterações; 
● $ git mergetool; 
● Resolver conflitos manualmente. 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Reset 
Permite navegar pelo histórico, voltando para um commit em que o estado do 
projeto esteja correto. 
# Limpa a staging area 
$ git reset 
$ git reset HEAD 
# Para além de limpar faz checkout do ponto desejado (cuidado!) 
$ git reset --hard master~ 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Remote 
● Inicialização com git clone já configura o remote. 
● São armazenados em .git/refs/remotes 
● Pelo contráraio a inicialização com git init não o faz. 
$ git remote add <nome> <url> 
● Listagem 
○ git remote 
○ git remote -v 
● Remoção 
○ git remote remove <nome> 
● Operações que utilizam remote 
○ $ git fetch 
○ $ git pull 
○ $ git push 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Desenvolvimento em grupo 
git fetch descarrega as referências juntamente com os objetos necessários para 
completar o histórico. 
$ git fetch remote refs 
exemplo: 
$ git fetch origin develop 
Este comando irá descarregar o branch develop e criar um novo branch com o 
nome origin/develop. 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Desenvolvimento em grupo 
git pull é a combinação do comando fetch com o merge. 
git pull origin develop, traduz-se para: 
$ git fetch origin develop 
$ git merge origin/develop 
Nota: As operações sobre branches são sempre feitas relativamente ao branch 
atual. 
Sessão livre sobre GIT 
- criação implicita do origin/develop 
- merge tipicamente fast-forward, mas 
não necessariamente 
Grupo Linux da Universidade de Aveiro
Desenvolvimento em grupo 
git push operação oposta ao fetch, isto é, envia as referências juntamente com 
os objetos necessários. 
$ git push origin master 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Alias 
É possível configurar alias para evitar escrever comandos longos. 
$ git config alias.st status 
$ git config alias.ci commit 
$ git config alias.l “log --decorate --graph” 
$ git config alias.ll “log --pretty=oneline --abbrev-commit” 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Tags 
git tag cria uma referência, ou seja, dá um nome a um objeto de commit. 
● São armazenadas em .git/refs/tags; 
● Gestão de tags é feita através do comando 
○ $ git tag 
● Enviadas para o remote 
○ $ git push origin --tags 
● Utilizando a opção -a dizemos ao git para criar uma tag anotada, ou seja, 
permite armazenar uma mensagem junto com a tag; 
● Para além da mensagem ainda é possível assinar as tags 
criptográficamente. 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Tags 
A B 
Sessão livre sobre GIT 
feature 
C D 
E 
HEAD 
F 
master 
v0.3 
beta-1 
Grupo Linux da Universidade de Aveiro
Comandos úteis 
Sessão livre sobre GIT 
● git revert 
○ Dado um ou mais commits, cria um novo objeto commit, para cada, 
com o patch inverso da alteração; 
● git cherry-pick 
○ Dado um ou mais commits, aplica as alterações criando um novo 
objeto commit para cada uma; 
● git rebase 
○ Permite modificar o histórico (não se deve fazer se já foi partilhado!); 
● git ls-files 
○ Mostra os ficheiros do repositório; 
● git stash 
○ Armazenar as alterações sem modificar o historico (área de stash); 
Grupo Linux da Universidade de Aveiro
Comandos úteis 
Sessão livre sobre GIT 
● git rev-parse 
○ Resolve o ID entre referências e ID abreviados; 
● git bisect 
○ Encontrar o commit que introduz um bug; 
● git fsck 
○ Verificação de erros no repositório; 
● git gc --prune 
○ Limpar objetos do git que não são necessários. 
Grupo Linux da Universidade de Aveiro
Referências 
● man pages são nossas amigas: 
○ git help <comando> , por exemplo git help add 
● Site oficial: 
○ http://git-scm.org - contém documentação muito boa! 
● Um modelo de branching: 
○ http://nvie.com/posts/a-successful-git-branching-model/ 
● Teste online: 
○ http://try.github.io/ 
● Outros: 
○ Boas práticas de mensagens de commit no git: http://sethrobertson. 
github.io/GitBestPractices/ 
○ Um projeto interessante (baseado em git) para guardar, sincronizar e 
versionar ficheiros de configuração linux entre máquinas: https: 
//github.com/RichiH/vcsh 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
Obrigado! 
Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT

Mais conteúdo relacionado

Mais procurados

Git e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson AjacksonGit e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson AjacksonAlysson Ajackson
 
Controle de Versões com Git
Controle de Versões com GitControle de Versões com Git
Controle de Versões com GitVagner Santana
 
Aula 2 - Curso Git e Github - Webschool
Aula 2 - Curso Git e Github - WebschoolAula 2 - Curso Git e Github - Webschool
Aula 2 - Curso Git e Github - WebschoolBruno Orlandi
 
Controle de Versão com Git e como Otimizar seu Workflow com Git Flow
Controle de Versão com Git e como Otimizar seu Workflow com Git FlowControle de Versão com Git e como Otimizar seu Workflow com Git Flow
Controle de Versão com Git e como Otimizar seu Workflow com Git FlowLucas Araújo Mezêncio
 
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012Mauro George
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDevHélio Medeiros
 
Controle de versão com git
Controle de versão com gitControle de versão com git
Controle de versão com gitIgorDiniz22
 
Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos Jonathan Célio
 
EIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareEIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareAldson Diego
 
Git e Gitlab para Iniciantes
Git e Gitlab para IniciantesGit e Gitlab para Iniciantes
Git e Gitlab para IniciantesIgorDiniz22
 

Mais procurados (20)

Aprendendo Git
Aprendendo GitAprendendo Git
Aprendendo Git
 
Git e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson AjacksonGit e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson Ajackson
 
Git e GitHub
Git e GitHubGit e GitHub
Git e GitHub
 
Controle de Versões com Git
Controle de Versões com GitControle de Versões com Git
Controle de Versões com Git
 
Aula 2 - Curso Git e Github - Webschool
Aula 2 - Curso Git e Github - WebschoolAula 2 - Curso Git e Github - Webschool
Aula 2 - Curso Git e Github - Webschool
 
Git
GitGit
Git
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao Git
 
Controle de Versão com Git e como Otimizar seu Workflow com Git Flow
Controle de Versão com Git e como Otimizar seu Workflow com Git FlowControle de Versão com Git e como Otimizar seu Workflow com Git Flow
Controle de Versão com Git e como Otimizar seu Workflow com Git Flow
 
Git e Github
Git e GithubGit e Github
Git e Github
 
Controle de versão com e git
Controle de versão com e gitControle de versão com e git
Controle de versão com e git
 
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDev
 
Git+github
Git+githubGit+github
Git+github
 
Controle de versão com git
Controle de versão com gitControle de versão com git
Controle de versão com git
 
Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos
 
Primeiros passos - GIT
Primeiros passos - GITPrimeiros passos - GIT
Primeiros passos - GIT
 
EIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareEIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de Software
 
Git e Gitlab para Iniciantes
Git e Gitlab para IniciantesGit e Gitlab para Iniciantes
Git e Gitlab para Iniciantes
 
Git v2
Git v2Git v2
Git v2
 

Destaque

Linux network administration | Curso de Redes | 3Way Networks
Linux network administration | Curso de Redes | 3Way NetworksLinux network administration | Curso de Redes | 3Way Networks
Linux network administration | Curso de Redes | 3Way Networks3Way Networks
 
Redes de computadores II - 4.Camada de Transporte TCP e UDP
Redes de computadores II - 4.Camada de Transporte TCP e UDPRedes de computadores II - 4.Camada de Transporte TCP e UDP
Redes de computadores II - 4.Camada de Transporte TCP e UDPMauro Tapajós
 
Versionamento Ágil com Git
Versionamento Ágil com GitVersionamento Ágil com Git
Versionamento Ágil com Gitelliando dias
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do GojavaJSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do GojavaFrederico Maia Arantes
 
Linux System Administrator | Curso de Redes | 3Way Networks
Linux System Administrator | Curso de Redes | 3Way NetworksLinux System Administrator | Curso de Redes | 3Way Networks
Linux System Administrator | Curso de Redes | 3Way Networks3Way Networks
 
Linguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY NetworksLinguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY Networks3Way Networks
 
Tecnologia java para sockets
Tecnologia java para socketsTecnologia java para sockets
Tecnologia java para socketslucascsoliveira
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsEduardo Mendes
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeansSliedesharessbarbosa
 
Apostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e PrimefacesApostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e PrimefacesRosicleia Frasson
 

Destaque (17)

Linux network administration | Curso de Redes | 3Way Networks
Linux network administration | Curso de Redes | 3Way NetworksLinux network administration | Curso de Redes | 3Way Networks
Linux network administration | Curso de Redes | 3Way Networks
 
Curso Java Web
Curso Java WebCurso Java Web
Curso Java Web
 
Git - Visão Geral
Git - Visão GeralGit - Visão Geral
Git - Visão Geral
 
Redes de computadores II - 4.Camada de Transporte TCP e UDP
Redes de computadores II - 4.Camada de Transporte TCP e UDPRedes de computadores II - 4.Camada de Transporte TCP e UDP
Redes de computadores II - 4.Camada de Transporte TCP e UDP
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
Versionamento Ágil com Git
Versionamento Ágil com GitVersionamento Ágil com Git
Versionamento Ágil com Git
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do GojavaJSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
 
Linux System Administrator | Curso de Redes | 3Way Networks
Linux System Administrator | Curso de Redes | 3Way NetworksLinux System Administrator | Curso de Redes | 3Way Networks
Linux System Administrator | Curso de Redes | 3Way Networks
 
Linguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY NetworksLinguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY Networks
 
TCP/IP Layers
TCP/IP LayersTCP/IP Layers
TCP/IP Layers
 
Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)
 
Tecnologia java para sockets
Tecnologia java para socketsTecnologia java para sockets
Tecnologia java para sockets
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeans
 
Apostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e PrimefacesApostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e Primefaces
 
3way curso-formacao-java-web-completo
3way curso-formacao-java-web-completo3way curso-formacao-java-web-completo
3way curso-formacao-java-web-completo
 

Semelhante a Git

Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACDanilo Pinotti
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Danilo Pinotti
 
Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesLeandro Cavalcante
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Tchelinux
 
Git - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteGit - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteWaldyr Felix
 
Minicurso GIT PET Computação
Minicurso GIT PET ComputaçãoMinicurso GIT PET Computação
Minicurso GIT PET ComputaçãoBruno Orlandi
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoFabricio Nogueira
 
Descomplicando o controle de versão com git
Descomplicando o controle de versão com gitDescomplicando o controle de versão com git
Descomplicando o controle de versão com gitHumberto Streb
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao GitOto Junior
 
Learn about Git - Git Tutorial
Learn about Git - Git TutorialLearn about Git - Git Tutorial
Learn about Git - Git TutorialLucas Brigida
 

Semelhante a Git (20)

Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENAC
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)
 
Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de Versões
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
 
Git 101
Git 101Git 101
Git 101
 
Git - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteGit - Rápido, seguro, eficiente
Git - Rápido, seguro, eficiente
 
Minicurso GIT PET Computação
Minicurso GIT PET ComputaçãoMinicurso GIT PET Computação
Minicurso GIT PET Computação
 
Git e github
Git e githubGit e github
Git e github
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básico
 
Controle de versão e colaboração com Git
Controle de versão e colaboração com GitControle de versão e colaboração com Git
Controle de versão e colaboração com Git
 
Git
GitGit
Git
 
Introdução ao git
Introdução ao gitIntrodução ao git
Introdução ao git
 
Descomplicando o controle de versão com git
Descomplicando o controle de versão com gitDescomplicando o controle de versão com git
Descomplicando o controle de versão com git
 
Git
GitGit
Git
 
Git para quem vem do SVN
Git para quem vem do SVNGit para quem vem do SVN
Git para quem vem do SVN
 
Git do Zero - Campus Party #12
Git do Zero - Campus Party #12Git do Zero - Campus Party #12
Git do Zero - Campus Party #12
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao Git
 
Introdução ao Git
Introdução ao Git   Introdução ao Git
Introdução ao Git
 
Learn about Git - Git Tutorial
Learn about Git - Git TutorialLearn about Git - Git Tutorial
Learn about Git - Git Tutorial
 
Git ao GitHub
Git ao GitHubGit ao GitHub
Git ao GitHub
 

Git

  • 1. GIT Source Control GLUA - Sessão Livre Ilan Pegoraro Igor Duarte Cardoso 12/03/2014
  • 2. História ● Criado por Linus Torvalds em 2005; ● Controlo de versões distribuído; ● Multi-plataforma (Unix-like, Windows, etc.); ● Interface de linha de comandos, no entanto existem várias alternativas gráficas: ○ gitk; ○ tig (linha de comandos mas usa n-curses); ○ Integração com IDEs; ○ Source-tree (OS X e Windows). Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 3. Inicialização do repositório Criação de um repositório local no diretório atual (pasta .git): ● $ git init Sessão livre sobre GIT ● $ git clone <url> Grupo Linux da Universidade de Aveiro
  • 4. .gitignore É um ficheiro utilizado para especificar outros ficheiros que o git deve ignorar. Sintaxe: ● Cada linha especifica uma regra; ● Shell globbing; ● # para comentários; ● O caráter ! no início da linha inverte o sentido da regra; ● Recursivo (regras são aplicadas a partir do diretório actual). Nota: Só funciona para os ficheiros que o git não esteja a seguir, caso contrário é preciso removê-los com git rm <ficheiro>. Sessão livre sobre GIT Grupo Linux da Universidade de Aveiro
  • 5. .gitignore <linha em branco> # comentário... não é reconhecido como regra *.class *.jar !lib/MyPrecious.jar *~ src/Test.java build/ Sessão livre sobre GIT Exemplo: Grupo Linux da Universidade de Aveiro
  • 6. git config Permite configurar opções do repositório ou opções globais, como: ● Editor; ● Dados do autor; ● Interface com cores. $ git config core.editor vim $ git config color.ui true $ git config user.name Glua $ git config user.email “glua@ua.pt” Nota: Para remover basta usar a flag --unset $ git config --unset … Nota 2: Para configurações globais basta usar a flag --global. $ git config --global … Sessão livre sobre GIT Grupo Linux da Universidade de Aveiro
  • 7. Adicionar um ficheiro git add permite adicionar um ficheiro à staging area. $ git add Main.java Nota: Após esta ação, o git irá criar um objeto na armazém de objetos que corresponde aos ficheiros criados e/ou alterados. Tecnicamente, as alterações são guardadas em disco. $ git status $ tree .git/objects Sessão livre sobre GIT Grupo Linux da Universidade de Aveiro
  • 8. Staging Area ● É a área que permite organizar um commit antes de o escrever no histórico do projeto; ● Serve para o git não estar continuamente a manipular o repositório. # On branch master # Changes to be committed: # # new file: MyClass.java # # Changes not staged for commit: # # modified: Main.java # # Untracked files: # # Main.class Nota: para remover um ficheiro da staging area, git rm --cached <ficheiro> Sessão livre sobre GIT Grupo Linux da Universidade de Aveiro
  • 9. Mensagem de commit (opcional) ...mas recomendado! Titulo <linha em branco> Corpo da messagem... As mensagens de commit do git têm um formato de conveniência, contudo não é obrigatório segui-lo. Nota: consultem as boas práticas para mensagens de commit: http://sethrobertson.github.io/GitBestPractices/ Sessão livre sobre GIT Grupo Linux da Universidade de Aveiro
  • 10. Guardar alterações (commit) git commit cria um novo objeto (commit object) com conteúdo da staging area e atualiza as referências HEAD e master. ● ID - função hash (sha1) de: ○ Conteúdo; ○ Autor; ○ Data; ○ Mensagem de log; ○ ID do commit antigo. $ git commit Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 11. Guardar alterações (commit) $ git add Main.java $ git commit HEAD master $ git add MyClass.java ... $ git commit Sessão livre sobre GIT A HEAD B master A HEAD master A Grupo Linux da Universidade de Aveiro
  • 12. Manipulação de ficheiros ● git rm <fich> ○ Remove o ficheiro do repositório; ● git rm --cached <fich> ○ Remove o ficheiro do repositório quando já foi adicionado; ● git mv <antigo> <novo> ○ Altera o nome do ficheiro <antigo> por <novo>; ○ git é tão inteligente que detecta a alteração do nome do ficheiro, mesmo sem usar o comando git mv. Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 13. Consulta de commit git log permite visualizar a listagem de todos os commits existentes no repositório. $ git log $ git log --graph --decorate $ git log --stat $ git log <fim>..<inicio> $ git shortlog Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 14. Ramos git branch cria uma nova linha de desenvolvimento. ● São armazenados em .git/refs/heads Isolamento Trabalho Atualização Integração $ git branch feature HEAD master A Sessão livre sobre GIT feature B Grupo Linux da Universidade de Aveiro
  • 15. Ramos Sessão livre sobre GIT ● Permanent Branches ○ Ramo de integração, por exemplo master; ○ Ramo de desenvolvimento, por exemplo develop; ○ Persistem no repositório. ● Topic Branches ○ Surgem dois tipos: hotfixes, feature (por convenção); ○ São utilizados para corrigir falhas ou desenvolver pequenas funcionalidades. Dicas Nota: git flow simplifica a utilização deste modelo de branching. http://nvie.com/posts/a-successful-git-branching-model/ Grupo Linux da Universidade de Aveiro
  • 16. Ramos git checkout atualiza os ficheiros do diretório de trabalho com a versão existente na base de dados referente ao ramo pretendido. Nota: git checkout -b <branch> cria o ramo e faz checkout para o mesmo. $ git checkout feature HEAD A Sessão livre sobre GIT feature master B Grupo Linux da Universidade de Aveiro
  • 17. Ramos git checkout atualiza os ficheiros do diretório de trabalho com a versão existente na base de dados referente ao ramo pretendido. Nota: git checkout -b <branch> cria o ramo e faz checkout para o mesmo. $ git checkout feature HEAD master A Sessão livre sobre GIT feature B Grupo Linux da Universidade de Aveiro
  • 18. Ramos git checkout pode ainda ser usado para atualizar os ficheiros do diretório de trabalho para um determinado commit do histórico, temporariamente. $ git checkout c02293177dd5db9d458f20a6fd27bf8849d0c01f Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 19. Ramos git branch também permite visualizar os ramos existentes no repositório # mostra os ramos locais $ git branch # mostra os ramos remotos $ git branch -r # mostra todos os ramos $ git branch -a # remove o ramo $ git branch -d feature # força a remoção do ramo cuidado! $ git branch -D feature Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 20. Ramos Sessão livre sobre GIT A master HEAD B feature C D após commits em feature Grupo Linux da Universidade de Aveiro
  • 21. Ramos B Sessão livre sobre GIT após commits em master A HEAD master feature C D E $ git checkout master Grupo Linux da Universidade de Aveiro
  • 22. Merging Merging é o processo de integrar commits de um ramo noutro. ● fast-forward merge; ● 3-way merge; ● Octopus. Todas as estratégias utilizam o comando git merge. ● A estratégia utilizada é detectada automaticamente pelo git. $ git checkout master $ git merge feature Nota: O merge é feito no ramo master, deixando o outro inalterado. Sessão livre sobre GIT Grupo Linux da Universidade de Aveiro
  • 23. Merging Fast-forward merge $ git checkout master Sessão livre sobre GIT A HEAD master B feature C D Grupo Linux da Universidade de Aveiro
  • 24. Merging Fast-forward merge $ git merge feature Sessão livre sobre GIT A HEAD master B feature C D Grupo Linux da Universidade de Aveiro
  • 25. Merging 3-way merge $ git checkout master Sessão livre sobre GIT A master B feature C D E HEAD Grupo Linux da Universidade de Aveiro
  • 26. Merging 3-way merge $ git merge Sessão livre sobre GIT A master B feature C D E HEAD F Grupo Linux da Universidade de Aveiro
  • 27. Conflitos Ao fazer o merge podem surgir conflictos entre alterações ao mesmo ficheiro. ● $ git checkout --ours Main.java ○ Checkout do nosso ficheiro, ignorando as alterações feitas por outros; ● $ git checkout --theirs Main.java ○ Checkout do ficheiro alterado por outros, ignorando as nossas alterações; ● $ git mergetool; ● Resolver conflitos manualmente. Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 28. Reset Permite navegar pelo histórico, voltando para um commit em que o estado do projeto esteja correto. # Limpa a staging area $ git reset $ git reset HEAD # Para além de limpar faz checkout do ponto desejado (cuidado!) $ git reset --hard master~ Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 29. Remote ● Inicialização com git clone já configura o remote. ● São armazenados em .git/refs/remotes ● Pelo contráraio a inicialização com git init não o faz. $ git remote add <nome> <url> ● Listagem ○ git remote ○ git remote -v ● Remoção ○ git remote remove <nome> ● Operações que utilizam remote ○ $ git fetch ○ $ git pull ○ $ git push Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 30. Desenvolvimento em grupo git fetch descarrega as referências juntamente com os objetos necessários para completar o histórico. $ git fetch remote refs exemplo: $ git fetch origin develop Este comando irá descarregar o branch develop e criar um novo branch com o nome origin/develop. Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 31. Desenvolvimento em grupo git pull é a combinação do comando fetch com o merge. git pull origin develop, traduz-se para: $ git fetch origin develop $ git merge origin/develop Nota: As operações sobre branches são sempre feitas relativamente ao branch atual. Sessão livre sobre GIT - criação implicita do origin/develop - merge tipicamente fast-forward, mas não necessariamente Grupo Linux da Universidade de Aveiro
  • 32. Desenvolvimento em grupo git push operação oposta ao fetch, isto é, envia as referências juntamente com os objetos necessários. $ git push origin master Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 33. Alias É possível configurar alias para evitar escrever comandos longos. $ git config alias.st status $ git config alias.ci commit $ git config alias.l “log --decorate --graph” $ git config alias.ll “log --pretty=oneline --abbrev-commit” Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 34. Tags git tag cria uma referência, ou seja, dá um nome a um objeto de commit. ● São armazenadas em .git/refs/tags; ● Gestão de tags é feita através do comando ○ $ git tag ● Enviadas para o remote ○ $ git push origin --tags ● Utilizando a opção -a dizemos ao git para criar uma tag anotada, ou seja, permite armazenar uma mensagem junto com a tag; ● Para além da mensagem ainda é possível assinar as tags criptográficamente. Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 35. Tags A B Sessão livre sobre GIT feature C D E HEAD F master v0.3 beta-1 Grupo Linux da Universidade de Aveiro
  • 36. Comandos úteis Sessão livre sobre GIT ● git revert ○ Dado um ou mais commits, cria um novo objeto commit, para cada, com o patch inverso da alteração; ● git cherry-pick ○ Dado um ou mais commits, aplica as alterações criando um novo objeto commit para cada uma; ● git rebase ○ Permite modificar o histórico (não se deve fazer se já foi partilhado!); ● git ls-files ○ Mostra os ficheiros do repositório; ● git stash ○ Armazenar as alterações sem modificar o historico (área de stash); Grupo Linux da Universidade de Aveiro
  • 37. Comandos úteis Sessão livre sobre GIT ● git rev-parse ○ Resolve o ID entre referências e ID abreviados; ● git bisect ○ Encontrar o commit que introduz um bug; ● git fsck ○ Verificação de erros no repositório; ● git gc --prune ○ Limpar objetos do git que não são necessários. Grupo Linux da Universidade de Aveiro
  • 38. Referências ● man pages são nossas amigas: ○ git help <comando> , por exemplo git help add ● Site oficial: ○ http://git-scm.org - contém documentação muito boa! ● Um modelo de branching: ○ http://nvie.com/posts/a-successful-git-branching-model/ ● Teste online: ○ http://try.github.io/ ● Outros: ○ Boas práticas de mensagens de commit no git: http://sethrobertson. github.io/GitBestPractices/ ○ Um projeto interessante (baseado em git) para guardar, sincronizar e versionar ficheiros de configuração linux entre máquinas: https: //github.com/RichiH/vcsh Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT
  • 39. Obrigado! Grupo Linux da Universidade de Aveiro Sessão livre sobre GIT