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
19/07/2016 GIT 8
GIT Desvantagem
• Mais complexo e uma curva de aprendizado maior para
ser usado
19/07/2016 GIT 9
SVN
Checkout
Synchronize
...
Controle de Versão Centralizado
19/07/2016 GIT 10
Commit 1
Commit 2
Commit 3
...
Commit N
Controle de Versão Distribuído
19/07/2016 GIT 11
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
19/07/2016...
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
19/07/2016 GIT 14
z
y
Branch 1 Branch 2
y
xx
w
Erro!!!
z
Er...
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
19/07/2016 GIT 16
2
LOCAL REMOTO
2
11
PULL
GIT Organização dos Commits
19/07/2016 GIT 17
2
LOCAL REMOTO
2
11
PULL
4 Commit de outra pessoa
GIT Organização dos Commits
19/07/2016 GIT 18
3
2
LOCAL REMOTO
2
11
PULL
4
Seu Commit
Commit de outra pessoa
GIT Organização dos Commits
19/07/2016 GIT 19
3
2
LOCAL REMOTO
2
11
ERRO!!!
Non fast forward
PULL
4PUSH
Seu Commit
Commit ...
GIT Organização dos Commits
19/07/2016 GIT 20
3
2
LOCAL REMOTO
2
11
PUSH successful
PULL
4
PUSH
REBASE
4
FETCH
3
19/07/2016 GIT 21
GIT Instalação
• http://git-scm.com/downloads
19/07/2016 GIT 22
GIT Instalação
• Para quem usa Linux
19/07/2016 GIT 23
GIT Instalação
• Para quem usa MacOS
19/07/2016 GIT 24
GIT Instalação
• Para quem usa Windows
19/07/2016 GIT 25
GIT Instalação
• Para quem usa Windows é instalado também um
interpretador de comando que imita os do Linux
19/07/2016 GIT...
19/07/2016 GIT 27
EGIT
19/07/2016 GIT 28
EGit é o plugin padrão do Eclipse para o sistema de controle
de versão GIT
O projeto EGit está impl...
EGIT
19/07/2016 GIT 29
EGit vem por padrão no eclipse
Windows -> Show View -> Git -> Git Repositories
19/07/2016 GIT 30
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
19/07/2016 GIT 32
GIT CONFIG PELO ECLIPSE
Windows -> Preferences -> Team -> Git -...
• 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
19/07/2016 GIT 34
GIT INIT POR LINHA DE COMANDO
19/07/2016 GIT 35
GIT INIT PELO ECLIPSE
Windows -> Show View -> Git -> Git Repository -> Create a
new Git Repository and a...
19/07/2016 GIT 36
Your
Computer
GIT CLONE
Local
Repository
Remote
Repository
Cria uma cópia de um repositório remoto na su...
• Usando o comando git clone via https
19/07/2016 GIT 37
GIT CLONE POR LINHA DE COMANDO
19/07/2016 GIT 38
GIT CLONE PELO ECLIPSE
Windows -> Show View -> Git -> Git Repository -> Clone a Git
Repository and add t...
• Git clone via https
19/07/2016 GIT 39
https://github.com/jadsonjs/Test.git
Usando https é
preciso colocar
usuário e senh...
• 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...
19/07/2016 GIT 41
Sua Chave Pública
Salvar Chave Privada
• Criando sua chave ssh pelo eclipse
• Eclipse -> Preferences -> ...
19/07/2016 GIT 42
Chaves privadas
carregadas pelo eclipse
É possível criar várias chaves RSA ou copiar a mesma chave
para ...
19/07/2016 GIT 43
GIT CLONE
• Adicione a chave pública criada no Repositório remoto
• No GitHub vá em settings -> SSH keys...
19/07/2016 GIT 44
GIT CLONE
• Adicione a chave pública criada no Repositório remoto
• No GitLab vá em Profile Settings -> ...
• Git clone via ssh
19/07/2016 GIT 45
GIT CLONE PELO ECLIPSE
git@github.com:jadsonjs/Test.git
19/07/2016 GIT 46
Diretório com
o código fonte
Branches locais
Branches Remotas
Commits iguais,
seu código está
atualizand...
19/07/2016 GIT 47
Ao fazer o clone, por padrão é criada uma
branch master local a partir da branch master
remota
GIT CLONE...
19/07/2016 GIT 48
• Para abrir o projeto no Eclipse é necessário importar o
projeto para o workspace do Eclipse
GIT CLONE ...
• 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
19/07/2016 GIT 50
GIT ADD REMOTE PELO ECLIPSE
• Permite visualizar o status do seu repositório local em
relação ao remoto
• Usando o comando git status:
19/07/2016 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...
• Existem 2 commits no repositório local que não estão no
remoto
19/07/2016 GIT 53
Commits diferentes
GIT STATUS PELO ECLI...
GIT Conceitos
19/07/2016 GIT 54
Your
Computer
GIT COMMIT
Local
Repository
Remote
Repository
Commit
Um Commit para o GIT é ...
• 3 passos
• Criar um novo arquivo
• Adicionar à staging area
• Realizar o commit
19/07/2016 GIT 55
GIT COMMIT POR LINHA D...
19/07/2016 GIT 56
GIT COMMIT PELO ECLIPSE
19/07/2016 GIT 57
Classes Selecionadas
Equivalente ao
comando “git add”
Mensagem do commit
Todos devem ser
Assinados com o...
19/07/2016 GIT 58
Add to index = seleciona quais classes alteradas serão comitadas
Replace with HEAD revison = Reverte as ...
• Mostra o histórico de commits no seu repositório local
• Comando git log:
19/07/2016 GIT 59
GIT LOG POR LINHA DE COMANDO
19/07/2016 GIT 60
GIT LOG PELO ECLIPSE
Windows -> Show View -> Git -> Git Repository -> Show in -
> History
GIT Conceitos
19/07/2016 GIT 61
Your
Computer
GIT PUSH
Local
Repository
Remote
Repository
PUSH
Um PUSH envia essa mudança ...
19/07/2016 GIT 62
Origin é o nome padrão do repositório que você clonou
Master é a branch que você está enviando
GIT PUSH ...
• Só depois do PUSH o arquivo apareceu no remoto
19/07/2016 GIT 63
GIT PUSH POR LINHA DE COMANDO
19/07/2016 GIT 64
GIT PUSH PELO ECLIPSE
19/07/2016 GIT 65
Branch local Onde você tá Para qual remota irá enviar
GIT PUSH PELO ECLIPSE
19/07/2016 GIT 66
• O Egit possui um atalho chamado “Push to Upstream” que envia um
push diretamente para uma branch remot...
GIT Conceitos
19/07/2016 GIT 67
Your
Computer
GIT PULL
Local
Repository
Remote
Repository
PULL
Um PULL recupera as mudança...
19/07/2016 GIT 68
GIT PULL POR LINHA DE COMANDO
19/07/2016 GIT 69
GIT PULL PELO ECLIPSE
EGIT Conceitos
19/07/2016 GIT 70
Your
Computer
GIT AMEND
Local
Repository
Remote
Repository
Commit 1
Amend serve para “cor...
19/07/2016 GIT 71
GIT AMEND POR LINHA DE COMANDO
19/07/2016 GIT 72
GIT AMEND PELO ECLIPSE
Realizar um commit normal
19/07/2016 GIT 73
Selecionar a opção Amend
Permite editar a mensagem e adicionar novas
classes ao commit anterior
GIT AMEN...
GIT Conceitos
19/07/2016 GIT 74
Your Computer
GIT BRANCHING
Local Repository Remote
Repository
Clone
MasterMasterBranch_1
...
19/07/2016 GIT 75
GIT BRANCHING POR LINHA DE COMANDO
Criando uma Branch local
Apagando a Branch local
19/07/2016 GIT 76
Enviando da “branch_1” local para a “master” remota do
servidor “origin”
GIT BRANCHING POR LINHA DE COMA...
19/07/2016 GIT 77
• Para criar um branch local a partir da master remota,
clicar em cima da master remota e utilizar a opç...
19/07/2016 GIT 78
Marca a branch que você está no momento
GIT BRANCHING PELO ECLIPSE
19/07/2016 GIT 79
GIT BRANCHING PELO ECLIPSE
Apagando a Branch local
19/07/2016 GIT 80
GIT BRANCHING PELO ECLIPSE
Branch local Onde você tá Para qual remota irá enviar
Realizando um PUSH a pa...
EGIT Conceitos
19/07/2016 GIT 81
Your Computer
Local Repository
MasterBranch_1
GIT Checkout
c0
c1
c0
c1
c2
git checkout br...
19/07/2016 GIT 82
• ou
GIT CHECKOUT POR LINHA DE COMANDO
19/07/2016 GIT 83
GIT CHECKOUT PELO ECLIPSE
Clica em cima da branch local e checkout
19/07/2016 GIT 84
• Equivalente ao comando git checkout –b nome_da_banch
GIT CHECKOUT PELO ECLIPSE
GIT Conceitos
19/07/2016 GIT 85
Your
Computer
GIT FETCH
Local
Repository
Remote
Tracking
Remote
Repository
FETCH
O FETCH a...
19/07/2016 GIT 86
GIT FETCH POR LINHA DE COMANDO
19/07/2016 GIT 87
GIT FETCH PELO ECLIPSE
Clica em cima do repositório e na opção Fetch from Upstream
O fetch recupera toda...
GIT Conceitos
19/07/2016 GIT 88
Your Computer
Local Repository
MasterBranch_1
GIT MERGE
c0
c1
c0
c1
c2
c5
c3
1º git checko...
19/07/2016 GIT 89
GIT MERGE POR LINHA DE COMANDO
A branch onde eu estou agora com essa
19/07/2016 GIT 90
GIT MERGE PELO ECLIPSE
1º Realizar um commit local
2º Recuperar as mudanças do removo com o FETCH
19/07/2016 GIT 91
Com o FETCH as mudanças estão na branch remota
2º Clicar em cima dessa branch remota e usar a opção MERG...
19/07/2016 GIT 92
Repare após o merge os commits continuam diferentes, não existe
nada novo a ser recuperado, mas existem ...
19/07/2016 GIT 93
Se existissem conflitos, o MERGE tentaria resolvê-los e
se não conseguisse, pararia e mostraria esses co...
GIT Conceitos
19/07/2016 GIT 94
Your
Computer
GIT PULL (FETCH + MERGE)
Local
Repository
Remote
Tracking
Remote
Repository
...
GIT Conceitos
19/07/2016 GIT 95
Your Computer
GIT REBASE
Local Repository Remote
Tracking
Remote
Repository
FETCH
Coloca o...
GIT Conceitos
19/07/2016 GIT 96
Your Computer
Local Repository
MasterBranch_1
GIT REBASE
c0
c1
c0
c1
c2
c3
1º git checkout...
19/07/2016 GIT 97
GIT REBASE POR LINHA DE COMANDO
19/07/2016 GIT 98
GIT REBASE PELO ECLIPSE
1º Recuperar as mudanças do removo com o FETCH
19/07/2016 GIT 99
Com o FETCH as mudanças estão na branch remota
2º Clicar em cima dessa branch remota e usar a opção Reba...
19/07/2016 GIT 100
Repare que os commits então iguais agora e não existe nada novo a
ser recuperado, o seu repositório loc...
19/07/2016 GIT 101
GIT REBASE
Se existissem commits locais novos, esse commits
seriam reordenados para depois dos 2 commit...
GIT Conceitos
19/07/2016 GIT 102
Local Repository
MasterBranch_1
GIT MERGE X GIT REBASE
c0
c1
c0
c1
c2
c3
Local Repository...
19/07/2016 GIT 103
GIT MERGE x GIT REBASE
Os dois reorganizam os commits para poder realizar o
push.
Qual usar?
O que você...
GIT Conceitos
19/07/2016 GIT 104
Your Computer
GIT CHERRY PICK
Local Repository
Remote
Repository
Passa commits específico...
19/07/2016 GIT 105
GIT CHERRY PICK POR LINHA DE COMANDO
1º - Cria o arquivo ou vários arquivo em um branch e realiza o com...
19/07/2016 GIT 106
2º - Verifica o commit realizado na branch
GIT CHERRY PICK POR LINHA DE COMANDO
19/07/2016 GIT 107
3º - Recupera esse commit para outra branch
GIT CHERRY PICK POR LINHA DE COMANDO
19/07/2016 GIT 108
GIT CHERRY PICK PELO ECLIPSE
1º - Abre a view history: windows -> show view -> history
2º - Clicar na o...
19/07/2016 GIT 109
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLIPSE
1º - Desenvolvedor 1 atualiza o seu repositório...
Cenário de Conflitos
19/07/2016 GIT 110
Remote Repository
Master
c0 c1
Local Repository
Master
c0 c1
Local Repository
Mast...
Local Repository
Master
Cenário de Conflitos
19/07/2016 GIT 111
Remote Repository
Master
c0 c1
Local Repository
Master
c0 ...
Cenário de Conflitos
19/07/2016 GIT 112
Remote Repository
Master
c0 c1 c2
Local Repository
Master
c0 c1 c2
Local Repositor...
Cenário de Conflitos
19/07/2016 GIT 113
Remote Repository
Master
c0 c1 c2
Local Repository
Master
c0 c1
Local Repository
M...
Solução: Fetch + Rebase
19/07/2016 GIT 114
Your Computer
Local Repository
MasterBranch_1
GIT REBASE
c0
c1
c0
c1
c2
c3
1º g...
Nota
19/07/2016 GIT 115
• Uma das desvantagens dos sistemas de controle de
versão distribuídos como o GIT, é que os commit...
19/07/2016 GIT 116
• Alteração de 4 classes por desenvolvedores
diferentes
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO...
19/07/2016 GIT 117
• Realiza um Commit Local
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLIPSE
• Tenta enviar para o repositório Remoto
• Erro ao fazer o push: non Fast Foward!
19/07/2016 GIT 118
RESOLVENDO CONFLITOS ...
19/07/2016 GIT 119
• 1º Fetch para recuperar o que foi
modificado no remoto
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PEL...
19/07/2016 GIT 120
• Opa, tem um commit novo para recuperar,
o seu commit também ainda não foi
integrado no remoto
RESOLVE...
19/07/2016 GIT 121
• 2º Rebase para aplicar as mudanças ao
seu código
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLI...
19/07/2016 GIT 122
• Rebase parou
porque achou
um conflito
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLIPSE
19/07/2016 GIT 123
• Corrige o conflito pelo Merge Tool do Eclipse
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLIPSE
19/07/2016 GIT 124
• Altera o lado esquerdo e salvar o arquivo
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLIPSE
19/07/2016 GIT 125
• Após a alteração, add to index
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLIPSE
19/07/2016 GIT 126
• Pronto! Conflito resolvido
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLIPSE
19/07/2016 GIT 127
• Mas tem outro?! 
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLIPSE
19/07/2016 GIT 128
• Rebase -> Continue
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ECLIPSE
19/07/2016 GIT 129
• Usando a view “git staging area” é possível
ver todas as classes que possuem conflito
• Corrige o pró...
19/07/2016 GIT 130
• “git staging area”
• Opa, resolvi, parece que não tem mais
nenhum.
• Vamos ver ...Continue Rebase
RES...
19/07/2016 GIT 131
• Rebase Terminou com sucesso, todos os
conflitos resolvidos
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA...
19/07/2016 GIT 132
• Seu commit tá no topo. Não tem mais nada
para trazer. Podemos realizar um PUSH
RESOLVENDO CONFLITOS N...
19/07/2016 GIT 133
• Nada novo para enviar, nada novo para
trazer... Fim.
RESOLVENDO CONFLITOS NO GIT = FETCH + REBA
PELO ...
19/07/2016 GIT 134
• Crigando
GIT TAGGING
Your Computer
Local Repository
Marca pontos específicos do histórico como sendo ...
19/07/2016 GIT 135
• Criar uma tag a partir do último commit
GIT TAGGING PELO ECLIPSE
19/07/2016 GIT 136
• Criar uma tag a partir de um commit
específico
GIT TAGGING PELO ECLIPSE
19/07/2016 GIT 137
• Colocar o nome e descrição da tag
GIT TAGGING PELO ECLIPSE
19/07/2016 GIT 138
• Enviar uma tag para o remoto
• Apenas criar uma tag localmente não significa
muita coisa, como os com...
19/07/2016 GIT 139
• Enviando uma tag para o remoto
GIT TAGGING PELO ECLIPSE
19/07/2016 GIT 140
• Alterando uma tag existente
GIT TAGGING PELO ECLIPSE
Caso tenha faltado algo na tag,
é possível sobre...
19/07/2016 GIT 141
• Removendo uma tag localmente
• Caso a tag criada esteja errada é possível
removê-la.
GIT TAGGING PELO...
19/07/2016 GIT 142
GIT TAGGING PELO ECLIPSE
• Removendo uma tag remotamente
• Em vez do push tags... usar o push normal
• ...
• No campo:
“Remote ref to
delete”
• colocar:
refs/tags/
”nome_da_tag”
19/07/2016 GIT 143
GIT TAGGING PELO ECLIPSE
• Remov...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 144
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 145
• Git é bastante poderoso. Você pode criar vários fluxos
entre b...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 146
Ao realizar o clone de um repositório remoto, o
repositório loca...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 147
Ao adicionar o remoto você deve configura se vai
enviar informaç...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 148
Adicione a URL desse novo repositório remoto
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 149
• Repositório adicionado estava vazio
• Ao realizar um push para...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 150
Ao realizar o
push escolha
o remoto
“origin2”
Que não é o
reposi...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 151
Escolha a
branch remota
do origin2 e
finalize o push
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 152
Realize o
clone desse
segundo
repositório
para a
máquina local
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 153
Veja que os dois repositórios estão iguais
Ou seja, as informaçõ...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 154
A cada nova
informação
adiciona é
possível enviar
para origin e
...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 155
Ao realizar um push no clone local de origin2,
as tags enviadas ...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 156
Configurando um segundo repositório para receber
informações. Ch...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 157
Escolha qual será o
nome da branch
remota no seu
repositório loc...
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 158
É criada uma branch remota para o repositório
“origin2_fetch”
Trabalhando com Múltiplos Repositórios
19/07/2016 GIT 159
Para receber as atualizações do repositório
origin2_fetch: Remot...
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
19/07/2016 GIT 161
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
19/07/2016 GIT 165
FLUXO PARA BRANCHES LOCAIS
Local Repository
1o PULL
MasterBranch_1
2º Create B...
Features Branch Workflow
19/07/2016 GIT 166
FLUXO PARA BRANCHES LOCAIS
Local Repository
MasterBranch_1
4o PUSH3º Commit
Features Branch Workflow
19/07/2016 GIT 167
FLUXO PARA BRANCHES LOCAIS
Local Repository
5o PULL
MasterBranch_1
6º Delete B...
GitHub Workflow
19/07/2016 GIT 168
GitHub Workflow
19/07/2016 GIT 169
• GitHub Workflow
• Fluxo criado para projetos open source que não
possuem releases bem...
GitHub Workflow
19/07/2016 GIT 170
Local Repository
MasterBranch_1
1º Create Branch
Remote Repository
Master
GitHub Workflow
19/07/2016 GIT 171
Local Repository
MasterBranch_1
2º Push para um branch remota de mesmo nome
Remote Repo...
GitHub Workflow
19/07/2016 GIT 172
Local Repository
MasterBranch_1
3º Crie um PULL Request da branch remota para a master
...
GitHub Workflow
19/07/2016 GIT 173
Local Repository
MasterBranch_1
4º Alguém revisa/aprova o Pull Request
5º Remova a bran...
Gitflow Workflow
19/07/2016 GIT 174
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
19/07/2016 GIT 180
master
1.0
Início do Processo
Gitflow Workflow
19/07/2016 GIT 181
master
develop
feature
1.0
Desenvolvimento de uma nova feature
Repositório Local
feature
Gitflow Workflow
19/07/2016 GIT 182
master
develop
1.0
Desenvolvimento de uma nova feature
Repositório Local
feature
Gitflow Workflow
19/07/2016 GIT 183
master
develop
1.0
Desenvolvimento da feature finalizado
Repositório Local
feature
Gitflow Workflow
19/07/2016 GIT 184
master
hotfix-1.1
develop
1.0
Surgimento de um bug em produção
Repositório Loc...
feature
hotfix-1.1
Gitflow Workflow
19/07/2016 GIT 185
master
develop
1.0
Finalizando um bug urgente em produção
1.1
Repos...
feature
hotfix-1.1
Gitflow Workflow
19/07/2016 GIT 186
master
release-2.0
develop
1.0
Preparando o lançamento de uma versã...
feature
hotfix-1.1
release-2.0
Gitflow Workflow
19/07/2016 GIT 187
master
develop
1.0
Tarefas da próxima release começam a...
feature
hotfix-1.1
release-2.0
Gitflow Workflow
19/07/2016 GIT 188
master
develop
1.0
Lançamento de versões release candid...
feature
hotfix-1.1
release-2.0
Gitflow Workflow
19/07/2016 GIT 189
master
develop
1.0
Versão do Sistema foi Finalizada, no...
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
19/07/2016...
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
19/07/2016 GIT 205
GitLab – Interface para o seu repositório GIT
19/07/2016 GIT 206
• GitLab inclui entre as suas
funcionalidades:
• gerencia...
Revisão de Código com o GitLab
19/07/2016 GIT 207
• GitLab permite que membros da equipe revisem
o código de outros membro...
Revisão de Código com o GitLab
19/07/2016 GIT 208
• Para forçar a criação de Merge Request,
desabilite o PUSH para a branc...
Revisão de Código com o GitLab
19/07/2016 GIT 209
• Project -> Settings -> Protected Branches
Revisão de Código com o GitLab
19/07/2016 GIT 210
• 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 re...
Merge Resquest no GitLab
Por fim, aceite o merge request e remova a
branch remota criada
GIT Documentação
19/07/2016 GIT 218
Git - guia prático:
http://rogerdudler.github.io/git-guide/
index.pt_BR.html
Git inici...
EGIT Documentação
19/07/2016 GIT 219
EGit – User Guide:
https://wiki.eclipse.org/EGit/User_Guide
GIT Workflows
19/07/2016 GIT 220
Comparing Workflows:
https://www.atlassian.com/git/tutorials/compari
ng-workflows
A succe...
19/07/2016 GIT 221
Sobre o GitLab:
https://about.gitlab.com/
Instalação
https://about.gitlab.com/installation/
Repositório...
Figuras Retiradas de:
19/07/2016 GIT 222
https://www.qnap.com/i/useng/app_center/con_show.php?op=showone&i
nternalName=git...
GIT19/07/2016 223
jadsonjs@gmail.com
Próximos SlideShares
Carregando em…5
×

Git

764 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
0 gostaram
Estatísticas
Notas
  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
764
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
0
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 é 19/07/2016 GIT 2
  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. 19/07/2016 GIT 3
  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. 19/07/2016 GIT 4
  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 19/07/2016 GIT 5
  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. 19/07/2016 GIT 6 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 19/07/2016 GIT 7
  8. 8. GIT Vantagens 19/07/2016 GIT 8
  9. 9. GIT Desvantagem • Mais complexo e uma curva de aprendizado maior para ser usado 19/07/2016 GIT 9 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 19/07/2016 GIT 10 Commit 1 Commit 2 Commit 3 ... Commit N
  11. 11. Controle de Versão Distribuído 19/07/2016 GIT 11 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 19/07/2016 GIT 12 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. 19/07/2016 GIT 13
  14. 14. GIT Organização dos Commits • Situação não suportadas pelo GIT 19/07/2016 GIT 14 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 19/07/2016 GIT 15
  16. 16. GIT Organização dos Commits 19/07/2016 GIT 16 2 LOCAL REMOTO 2 11 PULL
  17. 17. GIT Organização dos Commits 19/07/2016 GIT 17 2 LOCAL REMOTO 2 11 PULL 4 Commit de outra pessoa
  18. 18. GIT Organização dos Commits 19/07/2016 GIT 18 3 2 LOCAL REMOTO 2 11 PULL 4 Seu Commit Commit de outra pessoa
  19. 19. GIT Organização dos Commits 19/07/2016 GIT 19 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 19/07/2016 GIT 20 3 2 LOCAL REMOTO 2 11 PUSH successful PULL 4 PUSH REBASE 4 FETCH 3
  21. 21. 19/07/2016 GIT 21
  22. 22. GIT Instalação • http://git-scm.com/downloads 19/07/2016 GIT 22
  23. 23. GIT Instalação • Para quem usa Linux 19/07/2016 GIT 23
  24. 24. GIT Instalação • Para quem usa MacOS 19/07/2016 GIT 24
  25. 25. GIT Instalação • Para quem usa Windows 19/07/2016 GIT 25
  26. 26. GIT Instalação • Para quem usa Windows é instalado também um interpretador de comando que imita os do Linux 19/07/2016 GIT 26
  27. 27. 19/07/2016 GIT 27
  28. 28. EGIT 19/07/2016 GIT 28 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 19/07/2016 GIT 29 EGit vem por padrão no eclipse Windows -> Show View -> Git -> Git Repositories
  30. 30. 19/07/2016 GIT 30 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 19/07/2016 GIT 31 GIT CONFIG POR LINHA DE COMANDO
  32. 32. • key = user.name • value = Nome Usuário 19/07/2016 GIT 32 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 19/07/2016 GIT 33 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 19/07/2016 GIT 34 GIT INIT POR LINHA DE COMANDO
  35. 35. 19/07/2016 GIT 35 GIT INIT PELO ECLIPSE Windows -> Show View -> Git -> Git Repository -> Create a new Git Repository and add it to this view
  36. 36. 19/07/2016 GIT 36 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 19/07/2016 GIT 37 GIT CLONE POR LINHA DE COMANDO
  38. 38. 19/07/2016 GIT 38 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 19/07/2016 GIT 39 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. 19/07/2016 GIT 40 GIT CLONE PELO ECLIPSE
  41. 41. 19/07/2016 GIT 41 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. 19/07/2016 GIT 42 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. 19/07/2016 GIT 43 GIT CLONE • Adicione a chave pública criada no Repositório remoto • No GitHub vá em settings -> SSH keys -> Add SSH key
  44. 44. 19/07/2016 GIT 44 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 19/07/2016 GIT 45 GIT CLONE PELO ECLIPSE git@github.com:jadsonjs/Test.git
  46. 46. 19/07/2016 GIT 46 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. 19/07/2016 GIT 47 Ao fazer o clone, por padrão é criada uma branch master local a partir da branch master remota GIT CLONE PELO ECLIPSE
  48. 48. 19/07/2016 GIT 48 • 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 19/07/2016 GIT 49 GIT ADD REMOTE POR LINHA DE COMANDO
  50. 50. • Windows -> Show View -> Git -> Git Repository 19/07/2016 GIT 50 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: 19/07/2016 GIT 51 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 19/07/2016 GIT 52 GIT STATUS PELO ECLIPSE
  53. 53. • Existem 2 commits no repositório local que não estão no remoto 19/07/2016 GIT 53 Commits diferentes GIT STATUS PELO ECLIPSE
  54. 54. GIT Conceitos 19/07/2016 GIT 54 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 19/07/2016 GIT 55 GIT COMMIT POR LINHA DE COMANDO
  56. 56. 19/07/2016 GIT 56 GIT COMMIT PELO ECLIPSE
  57. 57. 19/07/2016 GIT 57 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. 19/07/2016 GIT 58 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: 19/07/2016 GIT 59 GIT LOG POR LINHA DE COMANDO
  60. 60. 19/07/2016 GIT 60 GIT LOG PELO ECLIPSE Windows -> Show View -> Git -> Git Repository -> Show in - > History
  61. 61. GIT Conceitos 19/07/2016 GIT 61 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. 19/07/2016 GIT 62 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 19/07/2016 GIT 63 GIT PUSH POR LINHA DE COMANDO
  64. 64. 19/07/2016 GIT 64 GIT PUSH PELO ECLIPSE
  65. 65. 19/07/2016 GIT 65 Branch local Onde você tá Para qual remota irá enviar GIT PUSH PELO ECLIPSE
  66. 66. 19/07/2016 GIT 66 • 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 19/07/2016 GIT 67 Your Computer GIT PULL Local Repository Remote Repository PULL Um PULL recupera as mudanças do repositório remoto para o local
  68. 68. 19/07/2016 GIT 68 GIT PULL POR LINHA DE COMANDO
  69. 69. 19/07/2016 GIT 69 GIT PULL PELO ECLIPSE
  70. 70. EGIT Conceitos 19/07/2016 GIT 70 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. 19/07/2016 GIT 71 GIT AMEND POR LINHA DE COMANDO
  72. 72. 19/07/2016 GIT 72 GIT AMEND PELO ECLIPSE Realizar um commit normal
  73. 73. 19/07/2016 GIT 73 Selecionar a opção Amend Permite editar a mensagem e adicionar novas classes ao commit anterior GIT AMEND PELO ECLIPSE
  74. 74. GIT Conceitos 19/07/2016 GIT 74 Your Computer GIT BRANCHING Local Repository Remote Repository Clone MasterMasterBranch_1 Criação de Branches locais
  75. 75. 19/07/2016 GIT 75 GIT BRANCHING POR LINHA DE COMANDO Criando uma Branch local Apagando a Branch local
  76. 76. 19/07/2016 GIT 76 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. 19/07/2016 GIT 77 • 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. 19/07/2016 GIT 78 Marca a branch que você está no momento GIT BRANCHING PELO ECLIPSE
  79. 79. 19/07/2016 GIT 79 GIT BRANCHING PELO ECLIPSE Apagando a Branch local
  80. 80. 19/07/2016 GIT 80 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 19/07/2016 GIT 81 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. 19/07/2016 GIT 82 • ou GIT CHECKOUT POR LINHA DE COMANDO
  83. 83. 19/07/2016 GIT 83 GIT CHECKOUT PELO ECLIPSE Clica em cima da branch local e checkout
  84. 84. 19/07/2016 GIT 84 • Equivalente ao comando git checkout –b nome_da_banch GIT CHECKOUT PELO ECLIPSE
  85. 85. GIT Conceitos 19/07/2016 GIT 85 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. 19/07/2016 GIT 86 GIT FETCH POR LINHA DE COMANDO
  87. 87. 19/07/2016 GIT 87 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 19/07/2016 GIT 88 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. 19/07/2016 GIT 89 GIT MERGE POR LINHA DE COMANDO A branch onde eu estou agora com essa
  90. 90. 19/07/2016 GIT 90 GIT MERGE PELO ECLIPSE 1º Realizar um commit local 2º Recuperar as mudanças do removo com o FETCH
  91. 91. 19/07/2016 GIT 91 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. 19/07/2016 GIT 92 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. 19/07/2016 GIT 93 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 19/07/2016 GIT 94 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 19/07/2016 GIT 95 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 19/07/2016 GIT 96 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. 19/07/2016 GIT 97 GIT REBASE POR LINHA DE COMANDO
  98. 98. 19/07/2016 GIT 98 GIT REBASE PELO ECLIPSE 1º Recuperar as mudanças do removo com o FETCH
  99. 99. 19/07/2016 GIT 99 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. 19/07/2016 GIT 100 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. 19/07/2016 GIT 101 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 19/07/2016 GIT 102 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. 19/07/2016 GIT 103 GIT MERGE x GIT REBASE Os dois reorganizam os commits para poder realizar o push. Qual usar? O que você achar melhor! Eu, pessoalmente prefiro o Rebase, porque reorganizar melhor, como se você tivesse acabado de clonar e fizesse o commit por último, não gerando um commit extra.
  104. 104. GIT Conceitos 19/07/2016 GIT 104 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
  105. 105. 19/07/2016 GIT 105 GIT CHERRY PICK POR LINHA DE COMANDO 1º - Cria o arquivo ou vários arquivo em um branch e realiza o commit
  106. 106. 19/07/2016 GIT 106 2º - Verifica o commit realizado na branch GIT CHERRY PICK POR LINHA DE COMANDO
  107. 107. 19/07/2016 GIT 107 3º - Recupera esse commit para outra branch GIT CHERRY PICK POR LINHA DE COMANDO
  108. 108. 19/07/2016 GIT 108 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º
  109. 109. 19/07/2016 GIT 109 RESOLVENDO CONFLITOS NO GIT = FETCH + REBA 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
  110. 110. Cenário de Conflitos 19/07/2016 GIT 110 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 + REBA PELO ECLIPSE
  111. 111. Local Repository Master Cenário de Conflitos 19/07/2016 GIT 111 Remote Repository Master c0 c1 Local Repository Master c0 c1 c3c0 c1 c2 Denv 2Denv 1 RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  112. 112. Cenário de Conflitos 19/07/2016 GIT 112 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 + REBA PELO ECLIPSE
  113. 113. Cenário de Conflitos 19/07/2016 GIT 113 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 + REBA PELO ECLIPSE
  114. 114. Solução: Fetch + Rebase 19/07/2016 GIT 114 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
  115. 115. Nota 19/07/2016 GIT 115 • 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.
  116. 116. 19/07/2016 GIT 116 • Alteração de 4 classes por desenvolvedores diferentes RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  117. 117. 19/07/2016 GIT 117 • Realiza um Commit Local RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  118. 118. • Tenta enviar para o repositório Remoto • Erro ao fazer o push: non Fast Foward! 19/07/2016 GIT 118 RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  119. 119. 19/07/2016 GIT 119 • 1º Fetch para recuperar o que foi modificado no remoto RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  120. 120. 19/07/2016 GIT 120 • Opa, tem um commit novo para recuperar, o seu commit também ainda não foi integrado no remoto RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  121. 121. 19/07/2016 GIT 121 • 2º Rebase para aplicar as mudanças ao seu código RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  122. 122. 19/07/2016 GIT 122 • Rebase parou porque achou um conflito RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  123. 123. 19/07/2016 GIT 123 • Corrige o conflito pelo Merge Tool do Eclipse RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  124. 124. 19/07/2016 GIT 124 • Altera o lado esquerdo e salvar o arquivo RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  125. 125. 19/07/2016 GIT 125 • Após a alteração, add to index RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  126. 126. 19/07/2016 GIT 126 • Pronto! Conflito resolvido RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  127. 127. 19/07/2016 GIT 127 • Mas tem outro?!  RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  128. 128. 19/07/2016 GIT 128 • Rebase -> Continue RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  129. 129. 19/07/2016 GIT 129 • 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 + REBA PELO ECLIPSE
  130. 130. 19/07/2016 GIT 130 • “git staging area” • Opa, resolvi, parece que não tem mais nenhum. • Vamos ver ...Continue Rebase RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  131. 131. 19/07/2016 GIT 131 • Rebase Terminou com sucesso, todos os conflitos resolvidos RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  132. 132. 19/07/2016 GIT 132 • Seu commit tá no topo. Não tem mais nada para trazer. Podemos realizar um PUSH RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  133. 133. 19/07/2016 GIT 133 • Nada novo para enviar, nada novo para trazer... Fim. RESOLVENDO CONFLITOS NO GIT = FETCH + REBA PELO ECLIPSE
  134. 134. 19/07/2016 GIT 134 • 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
  135. 135. 19/07/2016 GIT 135 • Criar uma tag a partir do último commit GIT TAGGING PELO ECLIPSE
  136. 136. 19/07/2016 GIT 136 • Criar uma tag a partir de um commit específico GIT TAGGING PELO ECLIPSE
  137. 137. 19/07/2016 GIT 137 • Colocar o nome e descrição da tag GIT TAGGING PELO ECLIPSE
  138. 138. 19/07/2016 GIT 138 • 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
  139. 139. 19/07/2016 GIT 139 • Enviando uma tag para o remoto GIT TAGGING PELO ECLIPSE
  140. 140. 19/07/2016 GIT 140 • Alterando uma tag existente GIT TAGGING PELO ECLIPSE Caso tenha faltado algo na tag, é possível sobrescreve uma criada anteriormente de mesmo nome
  141. 141. 19/07/2016 GIT 141 • Removendo uma tag localmente • Caso a tag criada esteja errada é possível removê-la. GIT TAGGING PELO ECLIPSE
  142. 142. 19/07/2016 GIT 142 GIT TAGGING PELO ECLIPSE • Removendo uma tag remotamente • Em vez do push tags... usar o push normal • Team -> Remote -> push
  143. 143. • No campo: “Remote ref to delete” • colocar: refs/tags/ ”nome_da_tag” 19/07/2016 GIT 143 GIT TAGGING PELO ECLIPSE • Removendo uma tag remotamente
  144. 144. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 144
  145. 145. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 145 • 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.
  146. 146. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 146 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
  147. 147. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 147 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)
  148. 148. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 148 Adicione a URL desse novo repositório remoto
  149. 149. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 149 • 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”.
  150. 150. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 150 Ao realizar o push escolha o remoto “origin2” Que não é o repositório de onde o código foi clonado
  151. 151. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 151 Escolha a branch remota do origin2 e finalize o push
  152. 152. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 152 Realize o clone desse segundo repositório para a máquina local
  153. 153. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 153 Veja que os dois repositórios estão iguais Ou seja, as informações do remoto “origin” foram enviadas para “origin2”
  154. 154. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 154 A cada nova informação adiciona é possível enviar para origin e origin2.
  155. 155. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 155 Ao realizar um push no clone local de origin2, as tags enviadas estão no novo repositório
  156. 156. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 156 Configurando um segundo repositório para receber informações. Chamado de “origin2_fetch”
  157. 157. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 157 Escolha qual será o nome da branch remota no seu repositório local normalmente refs/remotes/nome_dad o_ao_remoto
  158. 158. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 158 É criada uma branch remota para o repositório “origin2_fetch”
  159. 159. Trabalhando com Múltiplos Repositórios 19/07/2016 GIT 159 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.
  160. 160. 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... 19/07/2016 GIT 160
  161. 161. Features Branch Workflow 19/07/2016 GIT 161
  162. 162. 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 19/07/2016 GIT 162
  163. 163. 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. 19/07/2016 GIT 163
  164. 164. 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 19/07/2016 GIT 164
  165. 165. Features Branch Workflow 19/07/2016 GIT 165 FLUXO PARA BRANCHES LOCAIS Local Repository 1o PULL MasterBranch_1 2º Create Branch
  166. 166. Features Branch Workflow 19/07/2016 GIT 166 FLUXO PARA BRANCHES LOCAIS Local Repository MasterBranch_1 4o PUSH3º Commit
  167. 167. Features Branch Workflow 19/07/2016 GIT 167 FLUXO PARA BRANCHES LOCAIS Local Repository 5o PULL MasterBranch_1 6º Delete Branch
  168. 168. GitHub Workflow 19/07/2016 GIT 168
  169. 169. GitHub Workflow 19/07/2016 GIT 169 • 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
  170. 170. GitHub Workflow 19/07/2016 GIT 170 Local Repository MasterBranch_1 1º Create Branch Remote Repository Master
  171. 171. GitHub Workflow 19/07/2016 GIT 171 Local Repository MasterBranch_1 2º Push para um branch remota de mesmo nome Remote Repository MasterBranch_1 forbidden protected
  172. 172. GitHub Workflow 19/07/2016 GIT 172 Local Repository MasterBranch_1 3º Crie um PULL Request da branch remota para a master Remote Repository MasterBranch_1 pull request
  173. 173. GitHub Workflow 19/07/2016 GIT 173 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
  174. 174. Gitflow Workflow 19/07/2016 GIT 174
  175. 175. 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 19/07/2016 GIT 175
  176. 176. 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 19/07/2016 GIT 176
  177. 177. 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) 19/07/2016 GIT 177
  178. 178. 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 19/07/2016 GIT 178
  179. 179. 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 19/07/2016 GIT 179
  180. 180. Gitflow Workflow 19/07/2016 GIT 180 master 1.0 Início do Processo
  181. 181. Gitflow Workflow 19/07/2016 GIT 181 master develop feature 1.0 Desenvolvimento de uma nova feature Repositório Local
  182. 182. feature Gitflow Workflow 19/07/2016 GIT 182 master develop 1.0 Desenvolvimento de uma nova feature Repositório Local
  183. 183. feature Gitflow Workflow 19/07/2016 GIT 183 master develop 1.0 Desenvolvimento da feature finalizado Repositório Local
  184. 184. feature Gitflow Workflow 19/07/2016 GIT 184 master hotfix-1.1 develop 1.0 Surgimento de um bug em produção Repositório Local
  185. 185. feature hotfix-1.1 Gitflow Workflow 19/07/2016 GIT 185 master develop 1.0 Finalizando um bug urgente em produção 1.1 Repositório Local
  186. 186. feature hotfix-1.1 Gitflow Workflow 19/07/2016 GIT 186 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
  187. 187. feature hotfix-1.1 release-2.0 Gitflow Workflow 19/07/2016 GIT 187 master develop 1.0 Tarefas da próxima release começam a serem desenvolvidas 1.1 RC1 Repositório Local
  188. 188. feature hotfix-1.1 release-2.0 Gitflow Workflow 19/07/2016 GIT 188 master develop 1.0 Lançamento de versões release candidate 1.1 RC1 RC2 Repositório Local
  189. 189. feature hotfix-1.1 release-2.0 Gitflow Workflow 19/07/2016 GIT 189 master develop 1.0 Versão do Sistema foi Finalizada, novo ciclo se inicia 1.1 RC1 RC2 2.0 Repositório Local
  190. 190. 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 19/07/2016 GIT 190
  191. 191. 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. 19/07/2016 GIT 191
  192. 192. 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 19/07/2016 GIT 192
  193. 193. Gitflow Workflow na Prática • Surge uma tarefa de erro. • Um novo commit é realizado para a branch hotfix_teste 19/07/2016 GIT 193
  194. 194. 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. 19/07/2016 GIT 194
  195. 195. 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. 19/07/2016 GIT 195
  196. 196. 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 19/07/2016 GIT 196
  197. 197. 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. 19/07/2016 GIT 197
  198. 198. 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. 19/07/2016 GIT 198
  199. 199. 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 19/07/2016 GIT 199
  200. 200. 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 19/07/2016 GIT 200
  201. 201. 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 19/07/2016 GIT 201
  202. 202. 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 19/07/2016 GIT 202
  203. 203. 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. 19/07/2016 GIT 203
  204. 204. 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 19/07/2016 GIT 204
  205. 205. GitLab – Interface para o seu repositório GIT 19/07/2016 GIT 205
  206. 206. GitLab – Interface para o seu repositório GIT 19/07/2016 GIT 206 • 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
  207. 207. Revisão de Código com o GitLab 19/07/2016 GIT 207 • 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
  208. 208. Revisão de Código com o GitLab 19/07/2016 GIT 208 • 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
  209. 209. Revisão de Código com o GitLab 19/07/2016 GIT 209 • Project -> Settings -> Protected Branches
  210. 210. Revisão de Código com o GitLab 19/07/2016 GIT 210 • Escolha a Branch e clique em PROTECT
  211. 211. Merge Resquest no GitLab Realizando push para feature branch remota
  212. 212. Merge Resquest no GitLab Crie um Merge Request para a branch que a modificação deve ser enviada
  213. 213. Merge Resquest no GitLab Escolha da branch onde você realizou a mudança para a branch desejada (normalmente a master)
  214. 214. Merge Resquest no GitLab Defina quem revisará o merge request e submeta
  215. 215. Merge Resquest no GitLab Visualize na tela inicial os Merge Requests feitos para você
  216. 216. 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..
  217. 217. Merge Resquest no GitLab Por fim, aceite o merge request e remova a branch remota criada
  218. 218. GIT Documentação 19/07/2016 GIT 218 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
  219. 219. EGIT Documentação 19/07/2016 GIT 219 EGit – User Guide: https://wiki.eclipse.org/EGit/User_Guide
  220. 220. GIT Workflows 19/07/2016 GIT 220 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/
  221. 221. 19/07/2016 GIT 221 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
  222. 222. Figuras Retiradas de: 19/07/2016 GIT 222 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
  223. 223. GIT19/07/2016 223 jadsonjs@gmail.com

×