Eng. MSc. Jadson Santos
GIT
O sistema de controle de versão distribuído mais
popular para Java com Eclipse
GIT
• Em 2002 o kernel do Linux usava o BitKeeper um DVCS
proprietário.
• Em 2005 essa ferramenta deixou de ser livre.
• I...
GIT
• Git é um sistema de controle de versão distribuído e um
sistema de gerenciamento de código fonte, com ênfase
em velo...
GIT
• Diferentemente dos outros sistemas de controle de
versão (SVN) que guardam os arquivos e o delta das
mudanças realiz...
GIT Vantagens
• Git permite e encoraja você ter múltiplas branches locais.
• Permite criar uma nova branch para cada taref...
GIT Vantagens
• Git é rápido
• Quase todas as operações são realizadas localmente
• É escrito em C, reduzindo o overhead d...
GIT Vantagens
• Git é distribuído
• Todos desenvolvedores tem um backup inteiro do repositório
• Confiança dos Dados
• Tod...
GIT Vantagens
31/01/17 GIT
GIT Desvantagem
• Mais complexo e uma curva de aprendizado maior para
ser usado
31/01/17 GIT
SVN
Checkout
Synchronize
Comm...
Controle de Versão Centralizado
31/01/17 GIT
Commit 1
Commit 2
Commit 3
...
Commit N
Controle de Versão Distribuído
31/01/17 GIT
Commit sdfl230dss
Commit k0sddslds Commit asdfghj23f
Commit wloelkco42k
GIT Organização dos Commits
• Commits dentro de uma mesma branch possuem uma
sequencia organizada com ponteiros
31/01/17 G...
GIT Organização dos Commits
• Diferentemente do SVN, que o commit 10 vem depois do
commit 9, sistemas distribuídos não pod...
GIT Organização dos Commits
• Situação não suportadas pelo GIT
31/01/17 GIT
z
y
Branch 1 Branch 2
y
xx
w
Erro!!!
z
Erro!!!
GIT Organização dos Commits
• Sempre que a ordem dos ponteiros não tiver igual a
última vez que você sincronizou com o rep...
GIT Organização dos Commits
31/01/17 GIT
2
LOCAL REMOTO
2
11
PULL
GIT Organização dos Commits
31/01/17 GIT
2
LOCAL REMOTO
2
11
PULL
4 Commit de outra pessoa
GIT Organização dos Commits
31/01/17 GIT
3
2
LOCAL REMOTO
2
11
PULL
4
Seu Commit
Commit de outra pessoa
GIT Organização dos Commits
31/01/17 GIT
3
2
LOCAL REMOTO
2
11
ERRO!!!
Non fast forward
PULL
4PUSH
Seu Commit
Commit de ou...
GIT Organização dos Commits
31/01/17 GIT
3
2
LOCAL REMOTO
2
11
PUSH successful
PULL
4
PUSH
REBASE
4
FETCH
3
31/01/17 GIT
GIT Instalação
• http://git-scm.com/downloads
31/01/17 GIT
GIT Instalação
• Para quem usa Linux
31/01/17 GIT
GIT Instalação
• Para quem usa MacOS
31/01/17 GIT
GIT Instalação
• Para quem usa Windows
31/01/17 GIT
GIT Instalação
• Para quem usa Windows é instalado também um
interpretador de comando que imita os do Linux
31/01/17 GIT
31/01/17 GIT
EGIT
31/01/17 GIT
EGit é o plugin padrão do Eclipse para o sistema de controle
de versão GIT
O projeto EGit está implement...
EGIT
31/01/17 GIT
EGit vem por padrão no eclipse
Windows -> Show View -> Git -> Git Repositories
31/01/17 GIT
Conceitos e Principais
Comandos do GIT
• A primeira coisa a fazer depois da instalação é configurar
o seu nome e e-mail para assinar os seu commits
• Todo commit...
• key = user.name
• value = Nome Usuário
31/01/17 GIT
GIT CONFIG PELO ECLIPSE
Windows -> Preferences -> Team -> Git -> Con...
• Permite excluir arquivos que não devem ser versionados,
por exemplo: arquivos de configuração ou arquivos
binários.
• Co...
• Inicia um novo repositório local sem estar associado a um
remoto
31/01/17 GIT
GIT INIT POR LINHA DE COMANDO
31/01/17 GIT
GIT INIT PELO ECLIPSE
Windows -> Show View -> Git -> Git Repository -> Create a
new Git Repository and add it...
31/01/17 GIT
Your
Computer
GIT CLONE
Local
Repository
Remote
Repository
Cria uma cópia de um repositório remoto na sua máq...
• Usando o comando git clone via https
31/01/17 GIT
GIT CLONE POR LINHA DE COMANDO
31/01/17 GIT
GIT CLONE PELO ECLIPSE
Windows -> Show View -> Git -> Git Repository -> Clone a Git
Repository and add the cl...
• Git clone via https
31/01/17 GIT
https://github.com/jadsonjs/Test.git
Usando https é
preciso colocar
usuário e senha
GIT...
• Git clone via ssh
• A vantagem de usar ssh é que, uma vez que você criou
o arquivo com a chave, não precisa ficar digita...
31/01/17 GIT
Sua Chave Pública
Salvar Chave Privada
• Criando sua chave ssh pelo eclipse
• Eclipse -> Preferences -> Gener...
31/01/17 GIT
Chaves privadas
carregadas pelo eclipse
É possível criar várias chaves RSA ou copiar a mesma chave
para compu...
31/01/17 GIT
GIT CLONE
• Adicione a chave pública criada no Repositório remoto
• No GitHub vá em settings -> SSH keys -> A...
31/01/17 GIT
GIT CLONE
• Adicione a chave pública criada no Repositório remoto
• No GitLab vá em Profile Settings -> SSH k...
• Git clone via ssh
31/01/17 GIT
GIT CLONE PELO ECLIPSE
git@github.com:jadsonjs/Test.git
31/01/17 GIT
Diretório com
o código fonte
Branches locais
Branches Remotas
Commits iguais,
seu código está
atualizando em
...
31/01/17 GIT
Ao fazer o clone, por padrão é criada uma
branch master local a partir da branch master
remota
GIT CLONE PELO...
31/01/17 GIT
• Para abrir o projeto no Eclipse é necessário importar o
projeto para o workspace do Eclipse
GIT CLONE PELO ...
• Permite associar um repositório remoto a uma repositório
local já existente.
• Necessário quando você não fez o clone, a...
• Windows -> Show View -> Git -> Git Repository
31/01/17 GIT
GIT ADD REMOTE PELO ECLIPSE
• Permite visualizar o status do seu repositório local em
relação ao remoto
• Usando o comando git status:
31/01/17 GIT
Ex...
• Existe 1 commit local que precisa ser enviado para o
repositório remoto e existe 1 commit remoto que não está
no reposit...
• Existem 2 commits no repositório local que não estão no
remoto
31/01/17 GIT
Commits diferentes
GIT STATUS PELO ECLIPSE
GIT Conceitos
31/01/17 GIT
Your
Computer
GIT COMMIT
Local
Repository
Remote
Repository
Commit
Um Commit para o GIT é uma o...
• 3 passos
• Criar um novo arquivo
• Adicionar à staging area
• Realizar o commit
31/01/17 GIT
GIT COMMIT POR LINHA DE COM...
31/01/17 GIT
GIT COMMIT PELO ECLIPSE
31/01/17 GIT
Classes Selecionadas
Equivalente ao
comando “git add”
Mensagem do commit
Todos devem ser
Assinados com o e-ma...
31/01/17 GIT
Add to index = seleciona quais classes alteradas serão comitadas
Replace with HEAD revison = Reverte as alter...
• Mostra o histórico de commits no seu repositório local
• Comando git log:
31/01/17 GIT
GIT LOG POR LINHA DE COMANDO
31/01/17 GIT
GIT LOG PELO ECLIPSE
Windows -> Show View -> Git -> Git Repository -> Show in -
> History
GIT Conceitos
31/01/17 GIT
Your
Computer
GIT PUSH
Local
Repository
Remote
Repository
PUSH
Um PUSH envia essa mudança do se...
31/01/17 GIT
Origin é o nome padrão do repositório que você clonou
Master é a branch que você está enviando
GIT PUSH POR L...
• Só depois do PUSH o arquivo apareceu no remoto
31/01/17 GIT
GIT PUSH POR LINHA DE COMANDO
31/01/17 GIT
GIT PUSH PELO ECLIPSE
31/01/17 GIT
Branch local Onde você tá Para qual remota irá enviar
GIT PUSH PELO ECLIPSE
31/01/17 GIT
 O Egit possui um atalho chamado “Push to Upstream” que envia um
push diretamente para uma branch remota de ...
GIT Conceitos
31/01/17 GIT
Your
Computer
GIT PULL
Local
Repository
Remote
Repository
PULL
Um PULL recupera as mudanças do ...
31/01/17 GIT
GIT PULL POR LINHA DE COMANDO
31/01/17 GIT
GIT PULL PELO ECLIPSE
EGIT Conceitos
31/01/17 GIT
Your
Computer
GIT AMEND
Local
Repository
Remote
Repository
Commit 1
Amend serve para “corrigir...
31/01/17 GIT
GIT AMEND POR LINHA DE COMANDO
31/01/17 GIT
GIT AMEND PELO ECLIPSE
Realizar um commit normal
31/01/17 GIT
Selecionar a opção Amend
Permite editar a mensagem e adicionar novas
classes ao commit anterior
GIT AMEND PEL...
GIT Conceitos
31/01/17 GIT
Your Computer
GIT BRANCHING
Local Repository Remote
Repository
Clone
MasterMasterBranch_1
Criaç...
31/01/17 GIT
GIT BRANCHING POR LINHA DE COMANDO
Criando uma Branch local
Apagando a Branch local
31/01/17 GIT
Enviando da “branch_1” local para a “master” remota do
servidor “origin”
GIT BRANCHING POR LINHA DE COMANDO
R...
31/01/17 GIT
• Para criar um branch local a partir da master remota,
clicar em cima da master remota e utilizar a opção cr...
31/01/17 GIT
Marca a branch que você está no momento
GIT BRANCHING PELO ECLIPSE
31/01/17 GIT
GIT BRANCHING PELO ECLIPSE
Apagando a Branch local
31/01/17 GIT
GIT BRANCHING PELO ECLIPSE
Branch local Onde você tá Para qual remota irá enviar
Realizando um PUSH a partir ...
EGIT Conceitos
31/01/17 GIT
Your Computer
Local Repository
MasterBranch_1
GIT Checkout
c0
c1
c0
c1
c2
git checkout branch_...
31/01/17 GIT
• ou
GIT CHECKOUT POR LINHA DE COMANDO
31/01/17 GIT
GIT CHECKOUT PELO ECLIPSE
Clica em cima da branch local e checkout
31/01/17 GIT
• Equivalente ao comando git checkout –b nome_da_banch
GIT CHECKOUT PELO ECLIPSE
GIT Conceitos
31/01/17 GIT
Your
Computer
GIT FETCH
Local
Repository
Remote
Tracking
Remote
Repository
FETCH
O FETCH apenas...
31/01/17 GIT
GIT FETCH POR LINHA DE COMANDO
31/01/17 GIT
GIT FETCH PELO ECLIPSE
Clica em cima do repositório e na opção Fetch from Upstream
O fetch recupera todas as ...
GIT Conceitos
31/01/17 GIT
Your Computer
Local Repository
MasterBranch_1
GIT MERGE
c0
c1
c0
c1
c2
c5
c3
1º git checkout –b...
31/01/17 GIT
GIT MERGE POR LINHA DE COMANDO
A branch onde eu estou agora com essa
31/01/17 GIT
GIT MERGE PELO ECLIPSE
1º Realizar um commit local
2º Recuperar as mudanças do removo com o FETCH
31/01/17 GIT
Com o FETCH as mudanças estão na branch remota
2º Clicar em cima dessa branch remota e usar a opção MERGE par...
31/01/17 GIT
Repare após o merge os commits continuam diferentes, não existe
nada novo a ser recuperado, mas existem agora...
31/01/17 GIT
Se existissem conflitos, o MERGE tentaria resolvê-los e
se não conseguisse, pararia e mostraria esses conflit...
GIT Conceitos
31/01/17 GIT
Your
Computer
GIT PULL (FETCH + MERGE)
Local
Repository
Remote
Tracking
Remote
Repository
FETCH...
GIT Conceitos
31/01/17 GIT
Your Computer
GIT REBASE
Local Repository Remote
Tracking
Remote
Repository
FETCH
Coloca o seu ...
GIT Conceitos
31/01/17 GIT
Your Computer
Local Repository
MasterBranch_1
GIT REBASE
c0
c1
c0
c1
c2
c3
1º git checkout –b b...
31/01/17 GIT
GIT REBASE POR LINHA DE COMANDO
31/01/17 GIT
GIT REBASE PELO ECLIPSE
1º Recuperar as mudanças do removo com o FETCH
31/01/17 GIT
Com o FETCH as mudanças estão na branch remota
2º Clicar em cima dessa branch remota e usar a opção Rebase on...
31/01/17 GIT
Repare que os commits então iguais agora e não existe nada novo a
ser recuperado, o seu repositório local est...
31/01/17 GIT
GIT REBASE
Se existissem commits locais novos, esse commits
seriam reordenados para depois dos 2 commits remo...
GIT Conceitos
31/01/17 GIT
Local Repository
MasterBranch_1
GIT MERGE X GIT REBASE
c0
c1
c0
c1
c2
c3
Local Repository
Maste...
31/01/17 GIT
GIT MERGE x GIT REBASE
Os dois reorganizam os commits para poder realizar o
push.
Após o Merge as branches ap...
31/01/17 GIT
GIT MERGE x GIT REBASE
Qual usar?
Rebase é melhor para integrar mudanças
em branches que seguem o mesmo fluxo...
GIT Conceitos
31/01/17 GIT
Your Computer
GIT CHERRY PICK
Local Repository
Remote
Repository
Passa commits específicos de u...
31/01/17 GIT
GIT CHERRY PICK POR LINHA DE COMANDO
1º - Cria o arquivo ou vários arquivo em um branch e realiza o commit
31/01/17 GIT
2º - Verifica o commit realizado na branch
GIT CHERRY PICK POR LINHA DE COMANDO
31/01/17 GIT
3º - Recupera esse commit para outra branch
GIT CHERRY PICK POR LINHA DE COMANDO
31/01/17 GIT
GIT CHERRY PICK PELO ECLIPSE
1º - Abre a view history: windows -> show view -> history
2º - Clicar na opção v...
31/01/17 GIT
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
1º - Desenvolvedor 1 atualiza o seu repositório
2º -...
Cenário de Conflitos
31/01/17 GIT
Remote Repository
Master
c0 c1
Local Repository
Master
c0 c1
Local Repository
Master
c0 ...
Local Repository
Master
Cenário de Conflitos
31/01/17 GIT
Remote Repository
Master
c0 c1
Local Repository
Master
c0 c1
c3c...
Cenário de Conflitos
31/01/17 GIT
Remote Repository
Master
c0 c1 c2
Local Repository
Master
c0 c1 c2
Local Repository
Mast...
Cenário de Conflitos
31/01/17 GIT
Remote Repository
Master
c0 c1 c2
Local Repository
Master
c0 c1
Local Repository
Master
...
Solução: Fetch + Rebase
31/01/17 GIT
Your Computer
Local Repository
MasterBranch_1
GIT REBASE
c0
c1
c0
c1
c2
c3
1º git che...
Nota
31/01/17 GIT
• Uma das desvantagens dos sistemas de controle de
versão distribuídos como o GIT, é que os commits são
...
31/01/17 GIT
• Alteração de 4 classes por desenvolvedores
diferentes
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLI...
31/01/17 GIT
• Realiza um Commit Local
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
• Tenta enviar para o repositório Remoto
• Erro ao fazer o push: non Fast Foward!
31/01/17 GIT
RESOLVENDO CONFLITOS NO GIT...
31/01/17 GIT
• 1º Fetch para recuperar o que foi
modificado no remoto
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECL...
31/01/17 GIT
• Opa, tem um commit novo para recuperar,
o seu commit também ainda não foi
integrado no remoto
RESOLVENDO CO...
31/01/17 GIT
• 2º Rebase para aplicar as mudanças ao
seu código
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
31/01/17 GIT
• Rebase parou
porque achou
um conflito
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
31/01/17 GIT
• Corrige o conflito pelo Merge Tool do Eclipse
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
31/01/17 GIT
• Altera o lado esquerdo e salvar o arquivo
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
31/01/17 GIT
• Após a alteração, add to index
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
31/01/17 GIT
• Pronto! Conflito resolvido
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
31/01/17 GIT
• Mas tem outro?! 
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
31/01/17 GIT
• Rebase -> Continue
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIPSE
31/01/17 GIT
• Usando a view “git staging area” é possível
ver todas as classes que possuem conflito
• Corrige o próximo, ...
31/01/17 GIT
• “git staging area”
• Opa, resolvi, parece que não tem mais
nenhum.
• Vamos ver ...Continue Rebase
RESOLVEND...
31/01/17 GIT
• Rebase Terminou com sucesso, todos os
conflitos resolvidos
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO...
31/01/17 GIT
• Seu commit tá no topo. Não tem mais nada
para trazer. Podemos realizar um PUSH
RESOLVENDO CONFLITOS NO GIT ...
31/01/17 GIT
• Nada novo para enviar, nada novo para
trazer... Fim.
RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS
PELO ECLIP...
31/01/17 GIT
• Crigando
GIT TAGGING
Your Computer
Local Repository
Marca pontos específicos do histórico como sendo import...
31/01/17 GIT
• Criar uma tag a partir do último commit
GIT TAGGING PELO ECLIPSE
31/01/17 GIT
• Criar uma tag a partir de um commit
específico
GIT TAGGING PELO ECLIPSE
31/01/17 GIT
• Colocar o nome e descrição da tag
GIT TAGGING PELO ECLIPSE
31/01/17 GIT
• Enviar uma tag para o remoto
• Apenas criar uma tag localmente não significa
muita coisa, como os commits é...
31/01/17 GIT
• Enviando uma tag para o remoto
GIT TAGGING PELO ECLIPSE
31/01/17 GIT
• Alterando uma tag existente
GIT TAGGING PELO ECLIPSE
Caso tenha faltado algo na tag,
é possível sobrescreve...
31/01/17 GIT
• Removendo uma tag localmente
• Caso a tag criada esteja errada é possível
removê-la.
GIT TAGGING PELO ECLIP...
31/01/17 GIT
GIT TAGGING PELO ECLIPSE
• Removendo uma tag remotamente
• Em vez do push tags... usar o push normal
• Team -...
• No campo:
“Remote ref to
delete”
• colocar:
refs/tags/
”nome_da_tag”
31/01/17 GIT
GIT TAGGING PELO ECLIPSE
• Removendo u...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
 Git é bastante poderoso. Você pode criar vários fluxos
entre branche...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Ao realizar o clone de um repositório remoto, o
repositório local mant...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Ao adicionar o remoto você deve configura se vai
enviar informações pa...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Adicione a URL desse novo repositório remoto
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
 Repositório adicionado estava vazio
 Ao realizar um push para esse ...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Ao realizar o
push escolha
o remoto
“origin2”
Que não é o
repositório ...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Escolha a
branch remota
do origin2 e
finalize o push
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Realize o
clone desse
segundo
repositório
para a
máquina local
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Veja que os dois repositórios estão iguais
Ou seja, as informações do ...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
A cada nova
informação
adiciona é
possível enviar
para origin e
origin...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Ao realizar um push no clone local de origin2,
as tags enviadas estão ...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Configurando um segundo repositório para receber
informações. Chamado ...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Escolha qual será o
nome da branch
remota no seu
repositório local
nor...
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
É criada uma branch remota para o repositório
“origin2_fetch”
Trabalhando com Múltiplos
Repositórios
31/01/17 GIT
Para receber as atualizações do repositório
origin2_fetch: Remote -> f...
GIT Workflows
• O GIT permite criar vários
fluxos de desenvolvimento que
atendam a dinâmica da suas
empresa.
• Pode-se ter...
Features Branch Workflow
31/01/17 GIT
Features Branch Workflow
• A ideia central é que cada tarefa/feature seja
desenvolvida na sua própria branch
• Cada desenv...
Features Branch Workflow
• Feature Branch Workflow para branches locais
• A branch master local fica recebendo apenas
atua...
Features Branch Workflow
• A branch master local deve ser read only e
receber apenas pull do do remoto
• Isso evita que po...
Features Branch Workflow
31/01/17 GIT
FLUXO PARA BRANCHES LOCAIS
Local Repository
1o PULL
MasterBranch_1
2º Create Branch
Features Branch Workflow
31/01/17 GIT
FLUXO PARA BRANCHES LOCAIS
Local Repository
MasterBranch_1
4o PUSH3º Commit
Features Branch Workflow
31/01/17 GIT
FLUXO PARA BRANCHES LOCAIS
Local Repository
5o PULL
MasterBranch_1
6º Delete Branch
GitHub Workflow
31/01/17 GIT
GitHub Workflow
31/01/17 GIT
• GitHub Workflow
• Fluxo criado para projetos open source que não
possuem releases bem defin...
GitHub Workflow
31/01/17 GIT
Local Repository
MasterBranch_1
1º Create Branch
Remote Repository
Master
GitHub Workflow
31/01/17 GIT
Local Repository
MasterBranch_1
2º Push para um branch remota de mesmo nome
Remote Repository...
GitHub Workflow
31/01/17 GIT
Local Repository
MasterBranch_1
3º Crie um PULL Request da branch remota para a master
Remote...
GitHub Workflow
31/01/17 GIT
Local Repository
MasterBranch_1
4º Alguém revisa/aprova o Pull Request
5º Remova a branch loc...
Gitflow Workflow
31/01/17 GIT
Gitflow Workflow
• Define um conjunto de restrito de branch remotas
concebido em torno das releases do projeto
• Indicado ...
Gitflow Workflow
• Possui 2 branches principais
• A branch master armazena o histórico lançamento
oficial, refletindo o có...
Gitflow Workflow
• Além das duas branches principais existem
outras branches com um tempo de vida definido
• Feature Branc...
Gitflow Workflow
• Release branches: Devem ser criadas a partir da branch
develop e serem integradas novamente na develop ...
Gitflow Workflow
• Hotfix branches: São parecidas com as releases
branches, preparam para uma nova release do sistema,
emb...
Gitflow Workflow
31/01/17 GIT
master
1.0
Início do Processo
Gitflow Workflow
31/01/17 GIT
master
develop
feature
1.0
Desenvolvimento de uma nova feature
Repositório Local
feature
Gitflow Workflow
31/01/17 GIT
master
develop
1.0
Desenvolvimento de uma nova feature
Repositório Local
feature
Gitflow Workflow
31/01/17 GIT
master
develop
1.0
Desenvolvimento da feature finalizado
Repositório Local
feature
Gitflow Workflow
31/01/17 GIT
master
hotfix-1.1
develop
1.0
Surgimento de um bug em produção
Repositório Local
feature
hotfix-1.1
Gitflow Workflow
31/01/17 GIT
master
develop
1.0
Finalizando um bug urgente em produção
1.1
Repositório...
feature
hotfix-1.1
Gitflow Workflow
31/01/17 GIT
master
release-2.0
develop
1.0
Preparando o lançamento de uma versão, con...
feature
hotfix-1.1
release-2.0
Gitflow Workflow
31/01/17 GIT
master
develop
1.0
Tarefas da próxima release começam a serem...
feature
hotfix-1.1
release-2.0
Gitflow Workflow
31/01/17 GIT
master
develop
1.0
Lançamento de versões release candidate
1....
feature
hotfix-1.1
release-2.0
Gitflow Workflow
31/01/17 GIT
master
develop
1.0
Versão do Sistema foi Finalizada, novo cic...
Gitflow Workflow na Prática
• Uma possível maneira de implementar esse fluxo
utilizando o EGit
• Vamos criar 3 três branch...
Gitflow Workflow na Prática
• No começo do fluxo, todas as branches apontam para o
mesmo ponto (mesmo commit).
• Ps.: No f...
Gitflow Workflow na Prática
• Fluxo de desenvolvimento da próxima release se inicia.
Commits são feito na branch develop_t...
Gitflow Workflow na Prática
• Surge uma tarefa de erro.
• Um novo commit é realizado para a branch hotfix_teste
31/01/17 G...
Gitflow Workflow na Prática
• Agora é preciso finalizar a branch hotfix_teste, ou seja,
integra-la na master_teste para a ...
Gitflow Workflow na Prática
• As branches master_teste e hotfix_teste estão iguais
agora. Marque uma tag estável na master...
Gitflow Workflow na Prática
• Ainda falta integrar o código da hotfix_teste na
develop_teste
• Faça checkout para a develo...
Gitflow Workflow na Prática
• Como a develop_teste evoluiu, podem haver conflitos.
Se isso ocorrer, é mostrado o commit em...
Gitflow Workflow na Prática
• Realize um hard reset na branch develop_teste para
desfazer as mudanças aplicadas pelo merge...
Gitflow Workflow na Prática
• Após o desenvolvedor corrigir o conflito, aplique o merge
da hotfix_teste -> develop_teste n...
Gitflow Workflow na Prática
• A integração dos commits de uma branch para outra
branch deve ser feita pelo gerente de conf...
Gitflow Workflow na Prática
• Depois de realizar todos os aprimoramentos planejados,
está na hora de finalizar a branch de...
Gitflow Workflow na Prática
• Faça checkout da master_teste e realize o merge
develop_teste -> master_teste
• Crie uma nov...
Gitflow Workflow na Prática
• Isso finaliza o fluxo da develop_teste
• As branches master_teste e develop_teste devem esta...
Gitflow Workflow na Prática
• Assim ao iniciar um novo ciclo as 3 branches estão no
mesmo ponto, como no início do ciclo a...
GitLab – Interface para o seu repositório GIT
31/01/17 GIT
GitLab – Interface para o seu repositório GIT
31/01/17 GIT
• GitLab inclui entre as suas
funcionalidades:
• gerenciamento ...
Revisão de Código com o GitLab
31/01/17 GIT
• GitLab permite que membros da equipe revisem
o código de outros membros ante...
Revisão de Código com o GitLab
31/01/17 GIT
• Para forçar a criação de Merge Request,
desabilite o PUSH para a branch que ...
Revisão de Código com o GitLab
31/01/17 GIT
• Project -> Settings -> Protected Branches
Revisão de Código com o GitLab
31/01/17 GIT
• Escolha a Branch e clique em PROTECT
Merge Resquest no GitLab
Realizando push para feature branch remota
Merge Resquest no GitLab
Crie um Merge Request para a branch que a
modificação deve ser enviada
Merge Resquest no GitLab
Escolha da branch onde você realizou a mudança
para a branch desejada (normalmente a master)
Merge Resquest no GitLab
Defina quem revisará o merge request e submeta
Merge Resquest no GitLab
Visualize na tela inicial os Merge Requests feitos
para você
Merge Resquest no GitLab
Existe várias opções no momento de revisar o
merge request
 É possível visualizar as alterações ...
Merge Resquest no GitLab
Por fim, aceite o merge request e remova a
branch remota criada
GIT Documentação
31/01/17 GIT
Git - guia prático:
http://rogerdudler.github.io/git-guide/
index.pt_BR.html
Git iniciando:
...
EGIT Documentação
31/01/17 GIT
EGit – User Guide:
https://wiki.eclipse.org/EGit/User_Guide
GIT Workflows
31/01/17 GIT
Comparing Workflows:
https://www.atlassian.com/git/tutorials/compari
ng-workflows
A successful ...
31/01/17 GIT
Sobre o GitLab:
https://about.gitlab.com/
Instalação
https://about.gitlab.com/installation/
Repositório GitLa...
Figuras Retiradas de:
31/01/17 GIT
https://www.qnap.com/i/useng/app_center/con_show.php?op=showone&i
nternalName=git&versi...
GIT31/01/17
jadsonjs@gmail.com
Próximos SlideShares
Carregando em…5
×

Git

900 visualizações

Publicada em

Principais conceitos e comandos do GIT, tanto via linha de comando quanto utilizando o plugin EGIT do Eclipse

Publicada em: Software
1 comentário
1 gostou
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
900
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
10
Comentários
1
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Git

  1. 1. Eng. MSc. Jadson Santos GIT O sistema de controle de versão distribuído mais popular para Java com Eclipse
  2. 2. GIT • Em 2002 o kernel do Linux usava o BitKeeper um DVCS proprietário. • Em 2005 essa ferramenta deixou de ser livre. • Isso levou Linus Torvalds a desenvolver seu próprio sistema de controle de versão baseado em algumas lições que ele aprendeu enquanto usava o BitKeeper • Velocidade • Design Simples • Forte suporte a desenvolvimento não linear • Distribuído • Capacidade de suportar projetos grandes como o kernel do Linux é 31/01/17 GIT
  3. 3. GIT • Git é um sistema de controle de versão distribuído e um sistema de gerenciamento de código fonte, com ênfase em velocidade. • Cada diretório de trabalho do Git é um repositório com um histórico completo e habilidade total de acompanhamento das revisões, não dependente de acesso a uma rede ou a um servidor central. 31/01/17 GIT
  4. 4. GIT • Diferentemente dos outros sistemas de controle de versão (SVN) que guardam os arquivos e o delta das mudanças realizadas nesses arquivos, o GIT guarda as informações como um conjunto de snapshosts do repositório. • Em todo commit realizado, o GIT tira uma fotografia e guarda uma referência a essa fotografia. 31/01/17 GIT
  5. 5. GIT Vantagens • Git permite e encoraja você ter múltiplas branches locais. • Permite criar uma nova branch para cada tarefa trabalhada, não afetando as mudanças realizadas em outra tarefa • Pode fazer experimentos sem afetar os demais códigos que vocês está trabalhando 31/01/17 GIT
  6. 6. GIT Vantagens • Git é rápido • Quase todas as operações são realizadas localmente • É escrito em C, reduzindo o overhead das linguagem de alto nível. 31/01/17 GIT O tempo de se fazer um clone de um repositório inteiro (branches, tags) é equivalente ao tempo do checkout do SVN, que não baixa o repositório
  7. 7. GIT Vantagens • Git é distribuído • Todos desenvolvedores tem um backup inteiro do repositório • Confiança dos Dados • Todo arquivo e commit no GIT possui um checksum e pode ser recuperado a partir desse checksum • Staging Area • Área intermediária onde os commits podem ser revisados antes de realizar o commit. • Free and Open Source 31/01/17 GIT
  8. 8. GIT Vantagens 31/01/17 GIT
  9. 9. GIT Desvantagem • Mais complexo e uma curva de aprendizado maior para ser usado 31/01/17 GIT SVN Checkout Synchronize Commit Update Merge GIT Init Clone Commit PUSH PULL Fetch Merge Rebase Amend Cherry Pick Apply Patch Add to index ...
  10. 10. Controle de Versão Centralizado 31/01/17 GIT Commit 1 Commit 2 Commit 3 ... Commit N
  11. 11. Controle de Versão Distribuído 31/01/17 GIT Commit sdfl230dss Commit k0sddslds Commit asdfghj23f Commit wloelkco42k
  12. 12. GIT Organização dos Commits • Commits dentro de uma mesma branch possuem uma sequencia organizada com ponteiros 31/01/17 GIT z y Branch 1 x
  13. 13. GIT Organização dos Commits • Diferentemente do SVN, que o commit 10 vem depois do commit 9, sistemas distribuídos não podem manter essa ordem, pois o commit é local e não é possível saber que commit veio antes do outro. • Por isso, cada commit no GIT é identificado por um hash, não por números sequenciais e essa ordem de commits é mantida por meio de ponteiros. Um commit aponta para o pai dele. E o pai só pode ter 1 commit filho. 31/01/17 GIT
  14. 14. GIT Organização dos Commits • Situação não suportadas pelo GIT 31/01/17 GIT z y Branch 1 Branch 2 y xx w Erro!!! z Erro!!!
  15. 15. GIT Organização dos Commits • Sempre que a ordem dos ponteiros não tiver igual a última vez que você sincronizou com o repositório remoto, será preciso reordenar com as operações de merge ou rebase. • Se não ocorrerá o famoso erro “non fast forward” • Essa organização dos commits é o ponto mais importe para se começar a trabalhar com o GIT 31/01/17 GIT
  16. 16. GIT Organização dos Commits 31/01/17 GIT 2 LOCAL REMOTO 2 11 PULL
  17. 17. GIT Organização dos Commits 31/01/17 GIT 2 LOCAL REMOTO 2 11 PULL 4 Commit de outra pessoa
  18. 18. GIT Organização dos Commits 31/01/17 GIT 3 2 LOCAL REMOTO 2 11 PULL 4 Seu Commit Commit de outra pessoa
  19. 19. GIT Organização dos Commits 31/01/17 GIT 3 2 LOCAL REMOTO 2 11 ERRO!!! Non fast forward PULL 4PUSH Seu Commit Commit de outra pessoa
  20. 20. GIT Organização dos Commits 31/01/17 GIT 3 2 LOCAL REMOTO 2 11 PUSH successful PULL 4 PUSH REBASE 4 FETCH 3
  21. 21. 31/01/17 GIT
  22. 22. GIT Instalação • http://git-scm.com/downloads 31/01/17 GIT
  23. 23. GIT Instalação • Para quem usa Linux 31/01/17 GIT
  24. 24. GIT Instalação • Para quem usa MacOS 31/01/17 GIT
  25. 25. GIT Instalação • Para quem usa Windows 31/01/17 GIT
  26. 26. GIT Instalação • Para quem usa Windows é instalado também um interpretador de comando que imita os do Linux 31/01/17 GIT
  27. 27. 31/01/17 GIT
  28. 28. EGIT 31/01/17 GIT EGit é o plugin padrão do Eclipse para o sistema de controle de versão GIT O projeto EGit está implementando em cima da implementação JGit, biblioteca Java para Git Já vem por padrão nas distribuições do eclipse mais recentes.
  29. 29. EGIT 31/01/17 GIT EGit vem por padrão no eclipse Windows -> Show View -> Git -> Git Repositories
  30. 30. 31/01/17 GIT Conceitos e Principais Comandos do GIT
  31. 31. • A primeira coisa a fazer depois da instalação é configurar o seu nome e e-mail para assinar os seu commits • Todo commit no Git deve ser assinado com nome e e-email • Usando o comando git config 31/01/17 GIT GIT CONFIG POR LINHA DE COMANDO
  32. 32. • key = user.name • value = Nome Usuário 31/01/17 GIT GIT CONFIG PELO ECLIPSE Windows -> Preferences -> Team -> Git -> Configuration -> Add Entry
  33. 33. • Permite excluir arquivos que não devem ser versionados, por exemplo: arquivos de configuração ou arquivos binários. • Com o Git é muito fácil ignorar arquivos que não devem ser comitados no controle de versão • Obs.: Os arquivos ignorados não podem estar versionados. Você deve remover antes do controle de versão para de fato eles serem ignorados 31/01/17 GIT GIT IGNORE Remove os arquivos de configuração do eclipse e o diretório de saída da build
  34. 34. • Inicia um novo repositório local sem estar associado a um remoto 31/01/17 GIT GIT INIT POR LINHA DE COMANDO
  35. 35. 31/01/17 GIT GIT INIT PELO ECLIPSE Windows -> Show View -> Git -> Git Repository -> Create a new Git Repository and add it to this view
  36. 36. 31/01/17 GIT Your Computer GIT CLONE Local Repository Remote Repository Cria uma cópia de um repositório remoto na sua máquina local Clone
  37. 37. • Usando o comando git clone via https 31/01/17 GIT GIT CLONE POR LINHA DE COMANDO
  38. 38. 31/01/17 GIT GIT CLONE PELO ECLIPSE Windows -> Show View -> Git -> Git Repository -> Clone a Git Repository and add the clone to this view
  39. 39. • Git clone via https 31/01/17 GIT https://github.com/jadsonjs/Test.git Usando https é preciso colocar usuário e senha GIT CLONE PELO ECLIPSE
  40. 40. • Git clone via ssh • A vantagem de usar ssh é que, uma vez que você criou o arquivo com a chave, não precisa ficar digitando usuário e senha para realizar as operações. 31/01/17 GIT GIT CLONE PELO ECLIPSE
  41. 41. 31/01/17 GIT Sua Chave Pública Salvar Chave Privada • Criando sua chave ssh pelo eclipse • Eclipse -> Preferences -> General -> Network Connections -> SSH2 -> Key Management -> Generate RSA Key GIT CLONE PELO ECLIPSE
  42. 42. 31/01/17 GIT Chaves privadas carregadas pelo eclipse É possível criar várias chaves RSA ou copiar a mesma chave para computadores diferentes. Se você copiar uma chave de um computador para outro, tenha certeza que ela esteja carregada no eclipse. Apenas colocar no diretório .ssh não é suficiente. GIT CLONE PELO ECLIPSE
  43. 43. 31/01/17 GIT GIT CLONE • Adicione a chave pública criada no Repositório remoto • No GitHub vá em settings -> SSH keys -> Add SSH key
  44. 44. 31/01/17 GIT GIT CLONE • Adicione a chave pública criada no Repositório remoto • No GitLab vá em Profile Settings -> SSH keys -> Add SSH key
  45. 45. • Git clone via ssh 31/01/17 GIT GIT CLONE PELO ECLIPSE git@github.com:jadsonjs/Test.git
  46. 46. 31/01/17 GIT Diretório com o código fonte Branches locais Branches Remotas Commits iguais, seu código está atualizando em relação ao remoto Equivalente ao comando “git status” GIT CLONE PELO ECLIPSE • Visão Geral do Repositório Local no Eclipse
  47. 47. 31/01/17 GIT Ao fazer o clone, por padrão é criada uma branch master local a partir da branch master remota GIT CLONE PELO ECLIPSE
  48. 48. 31/01/17 GIT • Para abrir o projeto no Eclipse é necessário importar o projeto para o workspace do Eclipse GIT CLONE PELO ECLIPSE
  49. 49. • Permite associar um repositório remoto a uma repositório local já existente. • Necessário quando você não fez o clone, apenas usou o init e agora quer enviar as informações para um repositório remoto ou quando você quer associar mais de um repositório remoto ao mesmo repositório local ( ver slides trabalhando com múltiplos repositórios ) • Usando o comando git remote via https 31/01/17 GIT GIT ADD REMOTE POR LINHA DE COMANDO
  50. 50. • Windows -> Show View -> Git -> Git Repository 31/01/17 GIT GIT ADD REMOTE PELO ECLIPSE
  51. 51. • Permite visualizar o status do seu repositório local em relação ao remoto • Usando o comando git status: 31/01/17 GIT Existe 1 commit local que precisa ser enviado para o repositório remoto e existe 1 commit remoto que não está no repositório local master: Sua branch local origin/master: Branch remota que você está associado no momento GIT STATUS POR LINHA DE COMANDO
  52. 52. • Existe 1 commit local que precisa ser enviado para o repositório remoto e existe 1 commit remoto que não está no repositório local 31/01/17 GIT GIT STATUS PELO ECLIPSE
  53. 53. • Existem 2 commits no repositório local que não estão no remoto 31/01/17 GIT Commits diferentes GIT STATUS PELO ECLIPSE
  54. 54. GIT Conceitos 31/01/17 GIT Your Computer GIT COMMIT Local Repository Remote Repository Commit Um Commit para o GIT é uma operação que apenas registra a mudança no seu repositório local
  55. 55. • 3 passos • Criar um novo arquivo • Adicionar à staging area • Realizar o commit 31/01/17 GIT GIT COMMIT POR LINHA DE COMANDO
  56. 56. 31/01/17 GIT GIT COMMIT PELO ECLIPSE
  57. 57. 31/01/17 GIT Classes Selecionadas Equivalente ao comando “git add” Mensagem do commit Todos devem ser Assinados com o e-mail GIT COMMIT e GIT ADD PELO ECLIPSE
  58. 58. 31/01/17 GIT Add to index = seleciona quais classes alteradas serão comitadas Replace with HEAD revison = Reverte as alterações realizadas não comitadas Commit pela Staging Area: Windows -> Show View -> Git -> Staging Area GIT COMMIT PELO ECLIPSE
  59. 59. • Mostra o histórico de commits no seu repositório local • Comando git log: 31/01/17 GIT GIT LOG POR LINHA DE COMANDO
  60. 60. 31/01/17 GIT GIT LOG PELO ECLIPSE Windows -> Show View -> Git -> Git Repository -> Show in - > History
  61. 61. GIT Conceitos 31/01/17 GIT Your Computer GIT PUSH Local Repository Remote Repository PUSH Um PUSH envia essa mudança do seu repositório local para repositório remoto
  62. 62. 31/01/17 GIT Origin é o nome padrão do repositório que você clonou Master é a branch que você está enviando GIT PUSH POR LINHA DE COMANDO
  63. 63. • Só depois do PUSH o arquivo apareceu no remoto 31/01/17 GIT GIT PUSH POR LINHA DE COMANDO
  64. 64. 31/01/17 GIT GIT PUSH PELO ECLIPSE
  65. 65. 31/01/17 GIT Branch local Onde você tá Para qual remota irá enviar GIT PUSH PELO ECLIPSE
  66. 66. 31/01/17 GIT  O Egit possui um atalho chamado “Push to Upstream” que envia um push diretamente para uma branch remota de mesmo nome da branch local  Exemplo: se você estiver na branch local minha_branch, o Push to Upstream enviar as mudanças diretamente para a branch remota refs/heads/minha_branch GIT PUSH PELO ECLIPSE
  67. 67. GIT Conceitos 31/01/17 GIT Your Computer GIT PULL Local Repository Remote Repository PULL Um PULL recupera as mudanças do repositório remoto para o local
  68. 68. 31/01/17 GIT GIT PULL POR LINHA DE COMANDO
  69. 69. 31/01/17 GIT GIT PULL PELO ECLIPSE
  70. 70. EGIT Conceitos 31/01/17 GIT Your Computer GIT AMEND Local Repository Remote Repository Commit 1 Amend serve para “corrigir” um commit realizado anteriormente. As mudanças são “concatenadas” ao último commit realizado na branch sem gerar um novo commit Commit 2 Amend
  71. 71. 31/01/17 GIT GIT AMEND POR LINHA DE COMANDO
  72. 72. 31/01/17 GIT GIT AMEND PELO ECLIPSE Realizar um commit normal
  73. 73. 31/01/17 GIT Selecionar a opção Amend Permite editar a mensagem e adicionar novas classes ao commit anterior GIT AMEND PELO ECLIPSE
  74. 74. GIT Conceitos 31/01/17 GIT Your Computer GIT BRANCHING Local Repository Remote Repository Clone MasterMasterBranch_1 Criação de Branches locais
  75. 75. 31/01/17 GIT GIT BRANCHING POR LINHA DE COMANDO Criando uma Branch local Apagando a Branch local
  76. 76. 31/01/17 GIT Enviando da “branch_1” local para a “master” remota do servidor “origin” GIT BRANCHING POR LINHA DE COMANDO Realizando um PUSH a partir da branch
  77. 77. 31/01/17 GIT • Para criar um branch local a partir da master remota, clicar em cima da master remota e utilizar a opção create branch... GIT BRANCHING PELO ECLIPSE
  78. 78. 31/01/17 GIT Marca a branch que você está no momento GIT BRANCHING PELO ECLIPSE
  79. 79. 31/01/17 GIT GIT BRANCHING PELO ECLIPSE Apagando a Branch local
  80. 80. 31/01/17 GIT GIT BRANCHING PELO ECLIPSE Branch local Onde você tá Para qual remota irá enviar Realizando um PUSH a partir da branch
  81. 81. EGIT Conceitos 31/01/17 GIT Your Computer Local Repository MasterBranch_1 GIT Checkout c0 c1 c0 c1 c2 git checkout branch_1 No git, o checkout é a operação de mudar de branch Ptr
  82. 82. 31/01/17 GIT • ou GIT CHECKOUT POR LINHA DE COMANDO
  83. 83. 31/01/17 GIT GIT CHECKOUT PELO ECLIPSE Clica em cima da branch local e checkout
  84. 84. 31/01/17 GIT • Equivalente ao comando git checkout –b nome_da_banch GIT CHECKOUT PELO ECLIPSE
  85. 85. GIT Conceitos 31/01/17 GIT Your Computer GIT FETCH Local Repository Remote Tracking Remote Repository FETCH O FETCH apenas atualiza a sua referência ao repositório remoto na área chamada de: “Remote Tracking” Referência local ao repositório remoto
  86. 86. 31/01/17 GIT GIT FETCH POR LINHA DE COMANDO
  87. 87. 31/01/17 GIT GIT FETCH PELO ECLIPSE Clica em cima do repositório e na opção Fetch from Upstream O fetch recupera todas as mudanças em todas as branches remotas para o repositório local, mas não aplica as mudanças nas branches locais.
  88. 88. GIT Conceitos 31/01/17 GIT Your Computer Local Repository MasterBranch_1 GIT MERGE c0 c1 c0 c1 c2 c5 c3 1º git checkout –b branch_1 2º git commit – m “c2” 3º git checkout master 5º git merge branch_1 4º git commit –m “c3”
  89. 89. 31/01/17 GIT GIT MERGE POR LINHA DE COMANDO A branch onde eu estou agora com essa
  90. 90. 31/01/17 GIT GIT MERGE PELO ECLIPSE 1º Realizar um commit local 2º Recuperar as mudanças do removo com o FETCH
  91. 91. 31/01/17 GIT Com o FETCH as mudanças estão na branch remota 2º Clicar em cima dessa branch remota e usar a opção MERGE para trazer o novo commit para a branch local que você está no momento. GIT MERGE PELO ECLIPSE
  92. 92. 31/01/17 GIT Repare após o merge os commits continuam diferentes, não existe nada novo a ser recuperado, mas existem agora 2 commits para serem enviados. Ou seja, o merge reorganizou a ordem dos commits nesse repositório criando um novo commit para as alterações remotas e colocando depois do seu commit local GIT MERGE PELO ECLIPSE
  93. 93. 31/01/17 GIT Se existissem conflitos, o MERGE tentaria resolvê-los e se não conseguisse, pararia e mostraria esses conflitos para você resolvê-los GIT MERGE PELO ECLIPSE
  94. 94. GIT Conceitos 31/01/17 GIT Your Computer GIT PULL (FETCH + MERGE) Local Repository Remote Tracking Remote Repository FETCHMERGE O comando GIT PULL na verdade é uma atalho para a realização de dois comandos FETCH + MERGE O PULL atualiza a sua referência ao repositório remoto com O FETCH e aplica as mudanças no código local com o MERGE
  95. 95. GIT Conceitos 31/01/17 GIT Your Computer GIT REBASE Local Repository Remote Tracking Remote Repository FETCH Coloca o seu commit no topo da pilha de commits, como se você tive começado a alterar o código com a versão mais nova do repositório remoto. Em caso de conflitos, solicitará para você resolvê-los REBASE Novo commit remoto Novo commit local
  96. 96. GIT Conceitos 31/01/17 GIT Your Computer Local Repository MasterBranch_1 GIT REBASE c0 c1 c0 c1 c2 c3 1º git checkout –b branch_1 2º git commit – m “c2” 3º git checkout master 5º git rebase branch_1 4º git commit –m “c3” c2
  97. 97. 31/01/17 GIT GIT REBASE POR LINHA DE COMANDO
  98. 98. 31/01/17 GIT GIT REBASE PELO ECLIPSE 1º Recuperar as mudanças do removo com o FETCH
  99. 99. 31/01/17 GIT Com o FETCH as mudanças estão na branch remota 2º Clicar em cima dessa branch remota e usar a opção Rebase on para trazer os novos 2 commits para a branch local que você está no momento. GIT REBASE PELO ECLIPSE
  100. 100. 31/01/17 GIT Repare que os commits então iguais agora e não existe nada novo a ser recuperado, o seu repositório local estão igual ao remoto GIT REBASE PELO ECLIPSE
  101. 101. 31/01/17 GIT GIT REBASE Se existissem commits locais novos, esse commits seriam reordenados para depois dos 2 commits remotos recuperados. Reestabelecendo assim uma ordem para os commits nesse repositório Diferentemente do MERGE o REBASE só reorganiza os commits, não gera um novo. Se existissem conflitos, o rebase pararia e mostraria esses conflitos para você resolvê-los, como não houve, o rebase terminou com sucesso.
  102. 102. GIT Conceitos 31/01/17 GIT Local Repository MasterBranch_1 GIT MERGE X GIT REBASE c0 c1 c0 c1 c2 c3 Local Repository MasterBranch_1 c0 c1 c0 c1 c2 c5 c3 c3 c0 c1 c2 c0 c1 c2
  103. 103. 31/01/17 GIT GIT MERGE x GIT REBASE Os dois reorganizam os commits para poder realizar o push. Após o Merge as branches apontam para o mesmo commit Após o Rabase a branch integrada possue os commits ordenados de forma linear
  104. 104. 31/01/17 GIT GIT MERGE x GIT REBASE Qual usar? Rebase é melhor para integrar mudanças em branches que seguem o mesmo fluxo de desenvolvimento, por exemplo quando se deseja atualizar a branch local com a remota, já que o fluxo de commits fica linear e o histórico mais organizados Merge é melhor para integrar mudanças entre branches que seguem um fluxo diferente de desenvolvimento. Por exemplo, integrar a novas features na master, pois na maioria das vezes, você deseja que após a integração as duas branches apontem para o mesmo commit, ou seja, estejam iguais.
  105. 105. GIT Conceitos 31/01/17 GIT Your Computer GIT CHERRY PICK Local Repository Remote Repository Passa commits específicos de um branch para outra do mesmo repositório Branch 1 Branch 2
  106. 106. 31/01/17 GIT GIT CHERRY PICK POR LINHA DE COMANDO 1º - Cria o arquivo ou vários arquivo em um branch e realiza o commit
  107. 107. 31/01/17 GIT 2º - Verifica o commit realizado na branch GIT CHERRY PICK POR LINHA DE COMANDO
  108. 108. 31/01/17 GIT 3º - Recupera esse commit para outra branch GIT CHERRY PICK POR LINHA DE COMANDO
  109. 109. 31/01/17 GIT GIT CHERRY PICK PELO ECLIPSE 1º - Abre a view history: windows -> show view -> history 2º - Clicar na opção ver commits de todas as branches 3º - Clicar em cima de um commit de outra branch 4º - Utilizar o comando cherry pick... 2º 3º 4º
  110. 110. 31/01/17 GIT RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE 1º - Desenvolvedor 1 atualiza o seu repositório 2º - Desenvolvedor 2 atualiza o seu repositório 3º - Desenvolvedor 1 realiza o commit C2 na linha Y da classe X 4º - Desenvolvedor 2 realiza o commit C3 na mesma linha Y da mesma classe X 5º - Desenvolvedor 1 realizar o push para o remoto 6º - Desenvolvedor 2 tentar realizar o push da sua alteração para o remoto
  111. 111. Cenário de Conflitos 31/01/17 GIT Remote Repository Master c0 c1 Local Repository Master c0 c1 Local Repository Master c0 c1 Denv 2Denv 1 PULL PULL RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  112. 112. Local Repository Master Cenário de Conflitos 31/01/17 GIT Remote Repository Master c0 c1 Local Repository Master c0 c1 c3c0 c1 c2 Denv 2Denv 1 RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  113. 113. Cenário de Conflitos 31/01/17 GIT Remote Repository Master c0 c1 c2 Local Repository Master c0 c1 c2 Local Repository Master c0 c1 c3 1º PUSH Denv 2Denv 1 RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  114. 114. Cenário de Conflitos 31/01/17 GIT Remote Repository Master c0 c1 c2 Local Repository Master c0 c1 Local Repository Master c0 c1 c2 1º PUSH 2º PUSH ERRO!!! Non fast forward Denv 1 Denv 2 c3 RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  115. 115. Solução: Fetch + Rebase 31/01/17 GIT Your Computer Local Repository MasterBranch_1 GIT REBASE c0 c1 c0 c1 c2 c3 1º git checkout –b branch_1 2º git commit – m “c2” 3º git checkout master 5º git rebase branch_1 4º git commit –m “c3” c2
  116. 116. Nota 31/01/17 GIT • Uma das desvantagens dos sistemas de controle de versão distribuídos como o GIT, é que os commits são feitos nas máquinas locais, fora de ordem • Então ao enviar para o repositório remoto, o desenvolvedor precisa sempre se preocupar em manter o ordem dos commits, o que torna eles mais complexos do que os controles de versão centralizados como o SVN.
  117. 117. 31/01/17 GIT • Alteração de 4 classes por desenvolvedores diferentes RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  118. 118. 31/01/17 GIT • Realiza um Commit Local RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  119. 119. • Tenta enviar para o repositório Remoto • Erro ao fazer o push: non Fast Foward! 31/01/17 GIT RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  120. 120. 31/01/17 GIT • 1º Fetch para recuperar o que foi modificado no remoto RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  121. 121. 31/01/17 GIT • Opa, tem um commit novo para recuperar, o seu commit também ainda não foi integrado no remoto RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  122. 122. 31/01/17 GIT • 2º Rebase para aplicar as mudanças ao seu código RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  123. 123. 31/01/17 GIT • Rebase parou porque achou um conflito RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  124. 124. 31/01/17 GIT • Corrige o conflito pelo Merge Tool do Eclipse RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  125. 125. 31/01/17 GIT • Altera o lado esquerdo e salvar o arquivo RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  126. 126. 31/01/17 GIT • Após a alteração, add to index RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  127. 127. 31/01/17 GIT • Pronto! Conflito resolvido RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  128. 128. 31/01/17 GIT • Mas tem outro?!  RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  129. 129. 31/01/17 GIT • Rebase -> Continue RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  130. 130. 31/01/17 GIT • Usando a view “git staging area” é possível ver todas as classes que possuem conflito • Corrige o próximo, salva e add to index 1º Dois cliques aqui 2º Mostra o conflito aqui em cima RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  131. 131. 31/01/17 GIT • “git staging area” • Opa, resolvi, parece que não tem mais nenhum. • Vamos ver ...Continue Rebase RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  132. 132. 31/01/17 GIT • Rebase Terminou com sucesso, todos os conflitos resolvidos RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  133. 133. 31/01/17 GIT • Seu commit tá no topo. Não tem mais nada para trazer. Podemos realizar um PUSH RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  134. 134. 31/01/17 GIT • Nada novo para enviar, nada novo para trazer... Fim. RESOLVENDO CONFLITOS NO GIT = FETCH + REBAS PELO ECLIPSE
  135. 135. 31/01/17 GIT • Crigando GIT TAGGING Your Computer Local Repository Marca pontos específicos do histórico como sendo importantes. Normalmente significa uma versão estável do sistema C0 C1 C2 C3 V1.0
  136. 136. 31/01/17 GIT • Criar uma tag a partir do último commit GIT TAGGING PELO ECLIPSE
  137. 137. 31/01/17 GIT • Criar uma tag a partir de um commit específico GIT TAGGING PELO ECLIPSE
  138. 138. 31/01/17 GIT • Colocar o nome e descrição da tag GIT TAGGING PELO ECLIPSE
  139. 139. 31/01/17 GIT • Enviar uma tag para o remoto • Apenas criar uma tag localmente não significa muita coisa, como os commits é preciso fazer o push da tag para o remoto GIT TAGGING PELO ECLIPSE
  140. 140. 31/01/17 GIT • Enviando uma tag para o remoto GIT TAGGING PELO ECLIPSE
  141. 141. 31/01/17 GIT • Alterando uma tag existente GIT TAGGING PELO ECLIPSE Caso tenha faltado algo na tag, é possível sobrescreve uma criada anteriormente de mesmo nome
  142. 142. 31/01/17 GIT • Removendo uma tag localmente • Caso a tag criada esteja errada é possível removê-la. GIT TAGGING PELO ECLIPSE
  143. 143. 31/01/17 GIT GIT TAGGING PELO ECLIPSE • Removendo uma tag remotamente • Em vez do push tags... usar o push normal • Team -> Remote -> push
  144. 144. • No campo: “Remote ref to delete” • colocar: refs/tags/ ”nome_da_tag” 31/01/17 GIT GIT TAGGING PELO ECLIPSE • Removendo uma tag remotamente
  145. 145. Trabalhando com Múltiplos Repositórios 31/01/17 GIT
  146. 146. Trabalhando com Múltiplos Repositórios 31/01/17 GIT  Git é bastante poderoso. Você pode criar vários fluxos entre branches de um mesmo repositório, mas também fluxos entre vários repositórios.  A figura baixo mostra o fluxo dos repositórios do kenel do linux.
  147. 147. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Ao realizar o clone de um repositório remoto, o repositório local mantem referências a apenas esse repositório Por padrão chamado de “origin” É possível adicionar vários repositórios remotos ao seu repositório local
  148. 148. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Ao adicionar o remoto você deve configura se vai enviar informações para esse repositório ou recuperar informações de lá. Vamos primeiro configurar para enviar (push)
  149. 149. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Adicione a URL desse novo repositório remoto
  150. 150. Trabalhando com Múltiplos Repositórios 31/01/17 GIT  Repositório adicionado estava vazio  Ao realizar um push para esse novo repositório, todas as informações do repositório “origin”, que estavam na sua máquina, são enviadas para o segundo remoto, “origin2”.
  151. 151. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Ao realizar o push escolha o remoto “origin2” Que não é o repositório de onde o código foi clonado
  152. 152. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Escolha a branch remota do origin2 e finalize o push
  153. 153. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Realize o clone desse segundo repositório para a máquina local
  154. 154. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Veja que os dois repositórios estão iguais Ou seja, as informações do remoto “origin” foram enviadas para “origin2”
  155. 155. Trabalhando com Múltiplos Repositórios 31/01/17 GIT A cada nova informação adiciona é possível enviar para origin e origin2.
  156. 156. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Ao realizar um push no clone local de origin2, as tags enviadas estão no novo repositório
  157. 157. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Configurando um segundo repositório para receber informações. Chamado de “origin2_fetch”
  158. 158. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Escolha qual será o nome da branch remota no seu repositório local normalmente refs/remotes/nome_dad o_ao_remoto
  159. 159. Trabalhando com Múltiplos Repositórios 31/01/17 GIT É criada uma branch remota para o repositório “origin2_fetch”
  160. 160. Trabalhando com Múltiplos Repositórios 31/01/17 GIT Para receber as atualizações do repositório origin2_fetch: Remote -> fetch... -> Escolha o “origin2_fetch” As mudanças são jogadas nas branches remotas do repositório “origin2_fetch”. É possível pegar as atualizações do origin2_fetch e realizar um push para o origin, o repositório de onde você clonou.
  161. 161. GIT Workflows • O GIT permite criar vários fluxos de desenvolvimento que atendam a dinâmica da suas empresa. • Pode-se ter uma branch de aprimoramento, uma branch para manutenção, uma branch que congele o código a ser homologado antes de ir para produção, enquanto novas tarefas para a próxima release já podem começar a serem feitas, etc... 31/01/17 GIT
  162. 162. Features Branch Workflow 31/01/17 GIT
  163. 163. Features Branch Workflow • A ideia central é que cada tarefa/feature seja desenvolvida na sua própria branch • Cada desenvolvedor pode trabalhar na sua feature sem impactar nos demais desenvolvedores • A branch master nunca terá código quebrado 31/01/17 GIT
  164. 164. Features Branch Workflow • Feature Branch Workflow para branches locais • A branch master local fica recebendo apenas atualizações do remoto, nenhum commit é realizado diretamente nela • Todo commit e push para o remoto é realizado a partir de uma branch própria. 31/01/17 GIT
  165. 165. Features Branch Workflow • A branch master local deve ser read only e receber apenas pull do do remoto • Isso evita que por algum problema, a sua branch master local fique “quebrada” com conflitos que irão dificultar o seu desenvolvimento. • Estimula refactory e experiências durante o desenvolvimento. No pior caso, se não der certo, você apaga a branch e começa tudo de novo a partir da master. • Facilita a atualização branch master, pois nela nunca haverá conflitos e pode-se sempre realizar “pulls” diretamente 31/01/17 GIT
  166. 166. Features Branch Workflow 31/01/17 GIT FLUXO PARA BRANCHES LOCAIS Local Repository 1o PULL MasterBranch_1 2º Create Branch
  167. 167. Features Branch Workflow 31/01/17 GIT FLUXO PARA BRANCHES LOCAIS Local Repository MasterBranch_1 4o PUSH3º Commit
  168. 168. Features Branch Workflow 31/01/17 GIT FLUXO PARA BRANCHES LOCAIS Local Repository 5o PULL MasterBranch_1 6º Delete Branch
  169. 169. GitHub Workflow 31/01/17 GIT
  170. 170. GitHub Workflow 31/01/17 GIT • GitHub Workflow • Fluxo criado para projetos open source que não possuem releases bem definidas • Princípios: 1. Tudo que estiver na branch master pode ser colocado em produção 2. Crie uma branch local nova para tarefa e periodicamente faça push para uma branch de mesmo nome no servidor 3. Quando a tarefa estiver terminada, solicite um Pull Request para a branch master 4. Quando o responsável revisar/aprovar o pull request, faça merge com a master 5. Uma vez na master, pode ser colocado em produção imediatamente
  171. 171. GitHub Workflow 31/01/17 GIT Local Repository MasterBranch_1 1º Create Branch Remote Repository Master
  172. 172. GitHub Workflow 31/01/17 GIT Local Repository MasterBranch_1 2º Push para um branch remota de mesmo nome Remote Repository MasterBranch_1 forbidden protected
  173. 173. GitHub Workflow 31/01/17 GIT Local Repository MasterBranch_1 3º Crie um PULL Request da branch remota para a master Remote Repository MasterBranch_1 pull request
  174. 174. GitHub Workflow 31/01/17 GIT Local Repository MasterBranch_1 4º Alguém revisa/aprova o Pull Request 5º Remova a branch local e remota 6º Atualize a master local 7º Volte ao 1º passo Remote Repository MasterBranch_1 PULL
  175. 175. Gitflow Workflow 31/01/17 GIT
  176. 176. Gitflow Workflow • Define um conjunto de restrito de branch remotas concebido em torno das releases do projeto • Indicado para projetos grandes que possuem datas de releases bem definidas • Atribui funções muito específicas para diferentes branches e define como e quando elas devem interagir 31/01/17 GIT
  177. 177. Gitflow Workflow • Possui 2 branches principais • A branch master armazena o histórico lançamento oficial, refletindo o código de produção. • A branch develop serve como uma branch para integração de features, sempre reflete um estado com as últimas alterações de desenvolvimento entregues para a próxima release • Essas duas branch tem vida infinita, ou seja, nunca são removidas 31/01/17 GIT
  178. 178. Gitflow Workflow • Além das duas branches principais existem outras branches com um tempo de vida definido • Feature Branches: Usadas para desenvolver novas feature/tarefas, para as próximas releases ou releases distantes. Existe enquanto a feature está sendo desenvolvida e será integrada a branch develop ou descartada. ( Feature Branch normalmente são locais, apenas no repositório do desenvolvedor, eventualmente pode ser enviadas para o remoto para fim de backup) 31/01/17 GIT
  179. 179. Gitflow Workflow • Release branches: Devem ser criadas a partir da branch develop e serem integradas novamente na develop e master, normalmente possua o nome release-x.y.z, onde x.y.z é o número da versão. • São usadas para preparar a release. Fazendo as pequenas correções finais antes de lançar a versão de produção. Com isso a feature develop fica livre para receber mudanças da próxima grande release 31/01/17 GIT
  180. 180. Gitflow Workflow • Hotfix branches: São parecidas com as releases branches, preparam para uma nova release do sistema, embora não planejadas • Devem ser criada a partir da master e serem integradas na branches master e develop • São usadas para correções de erros ou tarefas urgentes que não podem esperar o ciclo normal de desenvolvimento 31/01/17 GIT
  181. 181. Gitflow Workflow 31/01/17 GIT master 1.0 Início do Processo
  182. 182. Gitflow Workflow 31/01/17 GIT master develop feature 1.0 Desenvolvimento de uma nova feature Repositório Local
  183. 183. feature Gitflow Workflow 31/01/17 GIT master develop 1.0 Desenvolvimento de uma nova feature Repositório Local
  184. 184. feature Gitflow Workflow 31/01/17 GIT master develop 1.0 Desenvolvimento da feature finalizado Repositório Local
  185. 185. feature Gitflow Workflow 31/01/17 GIT master hotfix-1.1 develop 1.0 Surgimento de um bug em produção Repositório Local
  186. 186. feature hotfix-1.1 Gitflow Workflow 31/01/17 GIT master develop 1.0 Finalizando um bug urgente em produção 1.1 Repositório Local
  187. 187. feature hotfix-1.1 Gitflow Workflow 31/01/17 GIT master release-2.0 develop 1.0 Preparando o lançamento de uma versão, congela o código da build 1.1 RC1 Repositório Local
  188. 188. feature hotfix-1.1 release-2.0 Gitflow Workflow 31/01/17 GIT master develop 1.0 Tarefas da próxima release começam a serem desenvolvidas 1.1 RC1 Repositório Local
  189. 189. feature hotfix-1.1 release-2.0 Gitflow Workflow 31/01/17 GIT master develop 1.0 Lançamento de versões release candidate 1.1 RC1 RC2 Repositório Local
  190. 190. feature hotfix-1.1 release-2.0 Gitflow Workflow 31/01/17 GIT master develop 1.0 Versão do Sistema foi Finalizada, novo ciclo se inicia 1.1 RC1 RC2 2.0 Repositório Local
  191. 191. Gitflow Workflow na Prática • Uma possível maneira de implementar esse fluxo utilizando o EGit • Vamos criar 3 três branches com nomes diferentes do padrão apenas para simular o fluxo pelo eclipse • master_teste: A master do projeto que contém a versão estável do sistema • develop_teste: A branch de aprimoramentos da próxima release, criada a partir da master_teste • hotfix_teste: A branch de erros, criada a partir da master_teste 31/01/17 GIT
  192. 192. Gitflow Workflow na Prática • No começo do fluxo, todas as branches apontam para o mesmo ponto (mesmo commit). • Ps.: No final do fluxo, todas devem continuar apontando para o mesmo commit. 31/01/17 GIT
  193. 193. Gitflow Workflow na Prática • Fluxo de desenvolvimento da próxima release se inicia. Commits são feito na branch develop_teste que começa a se distanciar na master_teste como os novos commits 31/01/17 GIT
  194. 194. Gitflow Workflow na Prática • Surge uma tarefa de erro. • Um novo commit é realizado para a branch hotfix_teste 31/01/17 GIT
  195. 195. Gitflow Workflow na Prática • Agora é preciso finalizar a branch hotfix_teste, ou seja, integra-la na master_teste para a correção do erro ir para produção, gerando uma nova versão do sistema. • Faça checkout da branch master_teste e utilize a operação de merge. 31/01/17 GIT
  196. 196. Gitflow Workflow na Prática • As branches master_teste e hotfix_teste estão iguais agora. Marque uma tag estável na master_teste e envie o código da master_teste para produção. 31/01/17 GIT
  197. 197. Gitflow Workflow na Prática • Ainda falta integrar o código da hotfix_teste na develop_teste • Faça checkout para a develop_teste e aplique o merge da hotfix_teste -> develop_teste 31/01/17 GIT
  198. 198. Gitflow Workflow na Prática • Como a develop_teste evoluiu, podem haver conflitos. Se isso ocorrer, é mostrado o commit em conflito, peça o responsável que realize a correção do conflito na branch develop_teste • O gestor de configuração e mudança não deve ser o responsável por solucionar o conflito e sim o desenvolvedor que alterou o código. 31/01/17 GIT
  199. 199. Gitflow Workflow na Prática • Realize um hard reset na branch develop_teste para desfazer as mudanças aplicadas pelo merge que estava com conflito e aguarde o desenvolvedor solucioná-lo. 31/01/17 GIT
  200. 200. Gitflow Workflow na Prática • Após o desenvolvedor corrigir o conflito, aplique o merge da hotfix_teste -> develop_teste novamente • A aplicação do merge deve ser direta. Sem precisar de alterações manuais. • Isso finaliza a branch hotfix. • Os commits realizados na hotfix foram integrados à master para ir para produção e foram integrados à develop para não serem perdidos quando a develp for integrada à master futuramente 31/01/17 GIT
  201. 201. Gitflow Workflow na Prática • A integração dos commits de uma branch para outra branch deve ser feita pelo gerente de configuração e mudança aplicando esses merges. Não deve ser feita pelo desenvolvedor. • É responsabilidade do gestor de configuração e mudança garantir que os commits aplicados na hotfix foram integrados na master e na develop 31/01/17 GIT
  202. 202. Gitflow Workflow na Prática • Depois de realizar todos os aprimoramentos planejados, está na hora de finalizar a branch develop_teste, aplicando as mudanças na master_teste. • Como desde o começo do fluxo a master_teste só pode ter evoluído o que existia na hotfix_teste e os possíveis conflitos da hotfix_teste já foram solucionados quando foram aplicado na develop_teste, no merge entre develop_teste -> master_teste não deve haver conflitos 31/01/17 GIT
  203. 203. Gitflow Workflow na Prática • Faça checkout da master_teste e realize o merge develop_teste -> master_teste • Crie uma nova tag na master_teste e mande o código para produção 31/01/17 GIT
  204. 204. Gitflow Workflow na Prática • Isso finaliza o fluxo da develop_teste • As branches master_teste e develop_teste devem estar iguais agora • A hotfix_teste não está igual as demais branches, mas como finalizou o fluxo da develop_teste, a hotfix_teste deve ser apagada e criada a partir da master_teste novamente. Deixando as 3 branches iguais para o início de um novo ciclo no fluxo. 31/01/17 GIT
  205. 205. Gitflow Workflow na Prática • Assim ao iniciar um novo ciclo as 3 branches estão no mesmo ponto, como no início do ciclo anterior. • A branch release é semelhante à hotfix, lembrando que quando é criada a release, a hotfix não deve ser usada • Lembrar também que a hotfix e release são criadas a cada ciclo e seus nomes devem conter a versão a que elas se referem. Exemplo: hotfix-1.1 e release-2.0 31/01/17 GIT
  206. 206. GitLab – Interface para o seu repositório GIT 31/01/17 GIT
  207. 207. GitLab – Interface para o seu repositório GIT 31/01/17 GIT • GitLab inclui entre as suas funcionalidades: • gerenciamento de repositórios GIT • code reviews • issue tracking • wikis • Pontos fortes: • Interface rica e intuitiva • Pontos fracos: • Instalação ainda um pouco complicada
  208. 208. Revisão de Código com o GitLab 31/01/17 GIT • GitLab permite que membros da equipe revisem o código de outros membros antes das alterações serem aprovadas para uma release do sistema • Muito último quando se tem estagiários ou pessoas novas na equipe • Para isso o GitLab faz uso da operação de Merge Request, similar a operação de PULL Request do GitHub workflow
  209. 209. Revisão de Código com o GitLab 31/01/17 GIT • Para forçar a criação de Merge Request, desabilite o PUSH para a branch que contém as releases do sistema (normalmente a master) • Project -> Settings
  210. 210. Revisão de Código com o GitLab 31/01/17 GIT • Project -> Settings -> Protected Branches
  211. 211. Revisão de Código com o GitLab 31/01/17 GIT • Escolha a Branch e clique em PROTECT
  212. 212. Merge Resquest no GitLab Realizando push para feature branch remota
  213. 213. Merge Resquest no GitLab Crie um Merge Request para a branch que a modificação deve ser enviada
  214. 214. Merge Resquest no GitLab Escolha da branch onde você realizou a mudança para a branch desejada (normalmente a master)
  215. 215. Merge Resquest no GitLab Defina quem revisará o merge request e submeta
  216. 216. Merge Resquest no GitLab Visualize na tela inicial os Merge Requests feitos para você
  217. 217. Merge Resquest no GitLab Existe várias opções no momento de revisar o merge request  É possível visualizar as alterações realizadas  Iniciar uma Discussão com quem solicitou o merge  etc..
  218. 218. Merge Resquest no GitLab Por fim, aceite o merge request e remova a branch remota criada
  219. 219. GIT Documentação 31/01/17 GIT Git - guia prático: http://rogerdudler.github.io/git-guide/ index.pt_BR.html Git iniciando: http://git-scm.com/book/en/v2/ Git-Basics-Getting-a-Git-Repository Git – documentação completa: http://git-scm.com/doc
  220. 220. EGIT Documentação 31/01/17 GIT EGit – User Guide: https://wiki.eclipse.org/EGit/User_Guide
  221. 221. GIT Workflows 31/01/17 GIT Comparing Workflows: https://www.atlassian.com/git/tutorials/compari ng-workflows A successful Git branching model http://nvie.com/posts/a-successful-git- branching-model/
  222. 222. 31/01/17 GIT Sobre o GitLab: https://about.gitlab.com/ Instalação https://about.gitlab.com/installation/ Repositório GitLab online: https://about.gitlab.com/gitlab-com/ GitLab – Interface para o seu repositório GIT
  223. 223. Figuras Retiradas de: 31/01/17 GIT https://www.qnap.com/i/useng/app_center/con_show.php?op=showone&i nternalName=git&version=2.1.0&down_1_name=TS- NASX86&jump_win=1 http://programmers.stackexchange.com/questions/35074/im-a- subversion-geek-why-should-i-consider-or-not-consider-mercurial-or-git-or http://stackoverflow.com/questions/2621610/what-git-branching-models- work-for-you
  224. 224. GIT31/01/17 jadsonjs@gmail.com

×