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

Git

  • 1.
    GIT Source Control GLUA - Sessão Livre Ilan Pegoraro Igor Duarte Cardoso 12/03/2014
  • 2.
    História ● Criadopor 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 É umficheiro 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 embranco> # 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 Permiteconfigurar 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 branchcria 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 livresobre 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 checkoutatualiza 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 checkoutatualiza 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 checkoutpode 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 branchtambé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 livresobre GIT A master HEAD B feature C D após commits em feature Grupo Linux da Universidade de Aveiro
  • 21.
    Ramos B Sessãolivre 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 fazero 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 navegarpelo 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çãocom 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ívelconfigurar 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 tagcria 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ãolivre 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ãolivre 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 ● manpages 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 Linuxda Universidade de Aveiro Sessão livre sobre GIT