SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
Mini Curso 
Gerenciamento de Configuração 
e Mudança com GIT + Eclipse 
Jadson Santos 
Amador Pahim
Gerenciamento de Configuração e Mudança 
§ Gerenciamento de Configuração e Mudança 
§ Padrões e Boas práticas de GCM 
§ Sistema de controle de Versão Distribuído 
o Introdução ao GIT 
o Principais Comados 
o Resolvendo Conflitos 
o Feature Branch Workflow
Gerenciamento de Configuração e Mudança 
Gerenciamento de Configuração e Mudança
Gerenciamento de Configuração e Mudança 
GCM 
Define como a organização constrói e disponibiliza seu 
produtos e como identifica e rastreia as suas mudanças. 
Compreende fatores como: gerenciamento de build, 
gerenciamento do processo de desenvolvimento e fluxo de 
trabalho da equipe, controle de versão dos artefatos do 
software. 
Fundamental para vários modelos de processos consolidados 
como: RUP, MPS-BR e CMMI
Gerenciamento de Configuração e Mudança 
GCM 
“Um conjunto de atividades projetadas para controlar as 
mudanças pela identificação dos produtos do trabalho que 
serão alterados, estabelecendo um relacionamento entre 
eles, definindo o mecanismo para o gerenciamento de 
diferentes versões destes produtos, controlando as 
mudanças impostas, e auditando e relatando as mudanças 
realizadas.” 
Roger Pressman, Software Engineering: A 
Practitioner's Approach
Gerenciamento de Configuração e Mudança 
GCM 
Um bom processo de configuração e mudança permitirá 
um melhor controle sobre a evolução dos artefatos do 
código, evitando sua degradação com o tempo. 
Erro 
Aprimoramento 
Caso 
de 
Uso 
Código 
Fantasma 
Lixo 
Chapolin 
Será preciso um grande esforço manual para fazer com que 
coisas inacabadas não sejam disponibilizadas para os usuários 
finais
Gerenciamento de Configuração e Mudança 
GCM 
Usar GCM apropriadamente pode fazer seu esforço de 
desenvolvimento diminuir e dá a flexibilidade que você precisa 
para trabalhar com eficiência
Gerenciamento de Configuração e Mudança 
GCM 
É essencial planejar como vai ser o 
seu GCM antes de iniciar o 
desenvolvimento de um software
Gerenciamento de Configuração e Mudança 
Terminologias
Gerenciamento de Configuração e Mudança 
Workspace 
É o lugar onde o desenvolvedor mantém todos os artefatos 
que ele precisa para realizar uma tarefa 
Codeline 
É um conjunto de arquivos fontes e outros artefato que 
abrange algum componente de software a medida que 
eles mudam ao longo do tempo. 
Uma codeline contém todas as revisões de todos os 
artefatos ao longo de uma caminho evolutivo.
Gerenciamento de Configuração e Mudança 
Codeline 
1.0, 
2.0,…, 
N.0 
= 
Vesão 
da 
codeline 
ou 
tag. 
Tag 
Um label que identifica um snapshot da codeline contendo 
vários revisões de cada componente no codeline
Gerenciamento de Configuração e Mudança 
Branch 
Uma Branch é uma versão de uma codeline como um todo 
que inicia na versão central (trunk ) e evolui 
independentemente. 
Merge 
Integração entre mudanças realizadas em uma codeline 
para outra.
Gerenciamento de Configuração e Mudança 
Princípios Gerais
Gerenciamento de Configuração e Mudança 
Princípios Gerais 
Há alguns princípios gerais que podem ser aplicados ao uso 
de CGM a todos os projetos de software. 
Porém os detalhes de como aplicá-los vai depender do 
tamanho e da natureza do projeto
Gerenciamento de Configuração e Mudança 
Princípios Gerais 
Use controle de Versão: A maneira como a organização 
comunica trabalho desenvolvidos entre si mesma 
Faça Builds Periódicas e Integra Frequentemente: 
• Permite aos desenvolvedores verificarem o 
funcionamento do software quando as parte do software 
executam em conjunto. 
• Quanto frequente é esse período vai depender de 
detalhes internos de cada empresa. 
• Integração demora um certo tempo, então isso pode 
adicionar um overhead ao processo de 
desenvolvimento.
Gerenciamento de Configuração e Mudança 
Princípios Gerais 
Permita Trabalho Autônomo: Cada membro da equipe 
deveria poder controlar que versão de que componente 
ele está trabalhando. 
Use Ferramentas: Se você tem muito processos manuais, 
erros ocorrerão com mais frequência
Gerenciamento de Configuração e Mudança 
Padrões de GCM
Gerenciamento de Configuração e Mudança 
Padrões de GCM 
Mainline 
Active Development Line 
Private Workspace 
Repository 
Private System Build 
Integration Build 
Third Party Codeline 
Task Level Commit 
Codeline Policy 
Smoke Test 
Unit Test 
Regression Test 
Private Versions 
Release Line 
Release-Prep Code Line 
Task Branch
Gerenciamento de Configuração e Mudança 
Padrões 
MAIN LINE PATTERN: 
Esse padrão descreve como gerenciar a sua codeline para 
minimizar os esforços de integração. 
Parece natural criar várias codeline para organizar seu 
trabalho em alguns casos. Porém mais codelines significa 
mais merges 
O esforço do merge pode superar a aparente organização
Gerenciamento de Configuração e Mudança 
Padrões 
Mau uso do Branches:
Gerenciamento de Configuração e Mudança 
Padrões 
Mau uso do Branches:
Gerenciamento de Configuração e Mudança 
Padrões 
MAIN LINE PATTERN: 
MAIN LINE: Uma codeline centralizada para servir de base 
para sub branches e merges que venham a ser necessários 
Use boas práticas de programação (integração contínua e 
testes automatizados) para assegurar que o que está na 
mainline é “usável”. 
Porém note que a MAIN LINE tem trabalho em progresso e 
nem sempre irá estar estável.
Gerenciamento de Configuração e Mudança 
Padrões 
MAIN LINE PATTERN Benefícios: 
• Ter uma MAIN LINE reduz merges e esforço de 
sincronização 
• A MAIN LINE traz alterações de volta para o fluxo de 
trabalho global, em vez de deixá-las fragmentadas
Gerenciamento de Configuração e Mudança 
Sistema de Controle de Versão 
Distribuído ( Git )
Gerenciamento de Configuração e Mudança 
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.
Gerenciamento de Configuração e Mudança 
GIT Funcionamento Interno 
Commits 
Ponteiro 
Master
Gerenciamento de Configuração e Mudança 
GIT Funcionamento Interno 
Master 
Branch 
1 
Criação de uma nova branch 
Ponteiros 
Commits
Gerenciamento de Configuração e Mudança 
GIT Funcionamento Interno 
Master 
Branch 
1 
Merge entre a “Branch 1” com a 
“Master” apenas com mudança 
de ponteiros. 
Sem Cópias de Arquivos !!! Por isso o 
GIT consegue ser rápido e escalável. 
Master
Gerenciamento de Configuração e Mudança 
Your 
Computer 
GIT FETCH 
Local 
Repository 
Remote 
Tracking 
Referência 
local 
ao 
repositório 
remoto 
Remote 
Repository 
FETCH 
O FETCH apenas atualiza a sua referência ao repositório 
remoto na área chamada de: “Remote Tracking”
Gerenciamento de Configuração e Mudança 
GIT PULL (FETCH + MERGE) 
Your 
Computer 
Local 
Repository 
Remote 
Tracking 
Remote 
Repository 
MERGE 
FETCH 
Atualiza a sua referência ao repositório remoto e 
realiza o merge se existirem alterações localmente. 
Em caso de conflitos, marcará o seu código fonte 
local, será necessário editar os arquivos e remover o código 
não desejado e as marcações.
Gerenciamento de Configuração e Mudança 
Your 
Computer 
GIT REBASE 
Local 
Repository 
Remote 
Tracking 
Novo 
commit 
local 
Novo 
commit 
remoto 
Remote 
Repository 
FETCH 
REBASE 
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
Gerenciamento de Configuração e Mudança
Gerenciamento de Configuração e Mudança 
Preparação do Ambiente 
hRp://git-­‐scm.com/downloads 
hRps://www.eclipse.org/downloads/
Gerenciamento de Configuração e Mudança 
Clone a Git Repository 
h"ps://github.com/jadsonjs/workshopsinfo.git
Gerenciamento de Configuração e Mudança 
Clone a Git Repository
Gerenciamento de Configuração e Mudança 
Estrutura de um Projeto GIT 
Mesmos 
commits. 
Isso 
significa 
que 
o 
repositório 
local 
está 
atualizado 
com 
o 
remoto. 
Pelo 
mesmo 
desde 
a 
úl]ma 
fez 
que 
as 
referências 
ao 
remoto 
foram 
atualizadas
Gerenciamento de Configuração e Mudança 
Estrutura de um Projeto GIT 
Observação: Diferentemente do SVN o GIT não salva o 
projeto no workspace do eclipse e sim dentro do repositório 
git local da sua máquina. 
Por padrão em: 
/Users/nome_usuario/git (MacOS) 
/home/nome_usuario/git (Linux) 
C:Documents and Settingsnome_usuariogit (Windows)
Gerenciamento de Configuração e Mudança 
Team -> Commit 
Modificar um 
artefato de código 
e realizar um 
commit no 
repositório local
Gerenciamento de Configuração e Mudança 
Team -> Push to Upstream 
Diferentemente do SVN, o commit não realizou nenhuma 
mudança do repositório remoto 
hRps://github.com/jadsonjs/workshopsinfo.git
Gerenciamento de Configuração e Mudança 
Team -> Push to Upstream 
Push Realizado com sucesso
Gerenciamento de Configuração e Mudança 
Team -> PULL 
• PULL atualiza o seu repositório local com o repositório 
remoto (PULL = FETCH + MERGE ) 
• Observação: Caso você já tenha realizado alguma 
modificação no repositório local (feito algum commit que 
não tenha sido enviado ao remoto), o PULL não é 
aconselhado, pois se tiver conflitos, ele irá “bagunçar” 
suas classes marcando os conflitos: 
>>>>>>>> v2e342as jadson@sinfo 
int a = 10; 
<<<<<<<< 
>>>>>>>> b66f8fk joao@sinfo 
int a = 20; 
<<<<<<<<
Gerenciamento de Configuração e Mudança 
Resolvendo Conflitos 
• Duas pessoas modificaram a mesma classe na mesma 
linha. 
• Uma pessoa realizou o primeiro PUSH sem problemas. 
• A segunda pessoa tenta realizar o PUSH , da mesma 
classe, para o repositório remoto. O Git mostrará uma 
mensagem impeditiva
Gerenciamento de Configuração e Mudança 
Team -> PUSH 
Irá gerar a mensagem Non-fast-forward
Gerenciamento de Configuração e Mudança 
Team -> PUSH 
Non-fast-forward +- = não consegui encaminhar o seu 
commit de uma forma rápida porque o código do 
repositório remoto mudou, não está igual ao seu local, tem 
coisas novas lá. 
Você deve primeiro atualizar o seu repositório local para 
trazer o que há de novo no remoto, para só ai realizar o 
PUSH
Gerenciamento de Configuração e Mudança 
Team -> FETCH from Upstream 
FETCH apenas atualiza a sua referência que você tem do 
repositório remoto. O seu código local continua da mesma 
forma que estava antes de realizar o FETCH.
Gerenciamento de Configuração e Mudança 
Team -> REBASE 1 
• O Rebase tenta recuperar todos os commits trazidos para 
o Remote Tracking pelo FETCH e jogar o seu commit para 
o top do history, como se o commit tivesse sido realizado 
depois dos commits novos no repositório remoto 
Seu 
commit 
que 
deu 
erro 
ao 
tentar 
fazer 
o 
PUSH 
Novos 
Commits 
no 
Remoto 
Novos 
Commits 
no 
Remoto 
Úl]mo 
Commit 
Local 
Antes 
da 
Modificação 
Seu 
commit 
que 
deu 
erro 
ao 
tentar 
fazer 
o 
PUSH 
Úl]mo 
Commit 
Local 
Antes 
da 
Modificação 
Rebase!
Gerenciamento de Configuração e Mudança 
Team -> REBASE 2 
• Após realizar o FECTH, para atualizar as referências no 
Remote Tracking, você então deve clicar em cima da 
referência remota do repositório e realizar um REBASE.
Gerenciamento de Configuração e Mudança 
Team -> REBASE 3 
Caso haja algum conflito 
a ser resolvido, o GIT 
pedirá para você 
resolver.
Gerenciamento de Configuração e Mudança 
Team -> REBASE 4 
A resolução de conflitos é igual ao SVN, mostrando os 
códigos fontes lado a lado.
Gerenciamento de Configuração e Mudança 
Team -> REBASE 5 
Ao solucionar o conflito, utilize a operação ADD TO INDEX 
para que a sua mudança realizada para resolver o conflito 
seja adiciona ao controle de versão e a classe deixe de ser 
mostrada como: “em conflito”. 
Equivalente à operação “mark as merge” do SVN
Gerenciamento de Configuração e Mudança 
Team -> REBASE 6 
Continuar para a próxima classe em conflito, até que todos 
os conflitos tenham sido resolvidos
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow 
Cada mudança (tarefa) deve ser feita em uma branch 
local separada. Isso ajuda a melhorar a organização do seu 
repositório local. 
Um PUSH pode não ser imediatamente incorporado ao 
repositório remoto, principalmente se no processo de 
desenvolvimento existir uma etapa de revisão de código e 
autorização. 
Seu PUSH poderá passar um tempo para ser aprovado, 
utilizar neste caso uma única branch local pode começar a 
ficar difícil de gerenciar as suas alterações.
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow 
Essa organização não é possível de ser feita com controle 
de versão centralizado como SVN, pois toda branch é 
remota 
• O ideal é que a branch master local não receba 
commits, apenas PULL do remoto. Ou seja, a branch 
master local deve ser “read only”, commits devem ser 
realizados apenas nas branches específicas de cada 
tarefa (feature)
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow 
Descrição do Fluxo “Branch por Tarefa”: 
1º Vai Começar o trabalho estando na branch master local 
sem nenhum commit realizado localmente. Realiza um PULL 
para atualizar o repositório local com as ultimas mudanças 
no remoto. 
2º Cria uma branch local a partir da master local e começa 
a fazer os commits da feature nessa banch. Ao realizar o 
PUSH se der algum problema, realizar o FETCH + REBASE na 
branch de trabalho local até conseguir enviar. 
3º Enviou? Vai começar outra tarefa? Volta para a branch 
master local, realizar um PULL para atualizar a master local 
com as mudanças do remoto. Cria outra branch local para 
a nova tarefa e o fluxo se repete 
4º Tarefa em produção ? Branch local da tarefa pode ser 
removida.
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow 
CUIDADO: Ao realizar o PUSH deve ser feita pela operação 
Remote -> PUSH .... 
Para escolher para qual branch remota deve ser enviado o 
seu commit. Se usar o “PUSH to Upstream” o eclipse por 
padrão envia o seu PUSH para uma branch remota de 
mesmo nome, que pode não ser a branch que você deseja 
enviar o commit
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow 
Escolha a branch local que você está no momento e a 
remota para onde o PUSH será enviado. Por exemplo, pode 
ser a master remota. 
Clique em Add Spec -> Finish
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow 
É possível fazer alternância entre as branches locais com a 
operação de checkout
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow 
Assim, caso o seu PUSH volte porque não foi aceito é 
possível votar para o código específico daquela tarefa, 
consertar o problema, enviar um novo PUSH e voltar para o 
branch local que você estava trabalhando. 
Quando a sua tarefa tiver em produção, o branch local 
pode ser removido, finalizado o fluxo.
Gerenciamento de Configuração e Mudança 
Feature Branch Workflow 
Quando o seu PUSH for aceito, ao realizar o PULL para a 
branch master as suas alterações realizadas na branch 
serão incorporadas à branch master local. 
Ao criar uma nova branch local deve-se fazer sempre 
partindo da master local, assim o seu código local estará 
sempre atualizado com o repositório remoto.
Gerenciamento de Configuração e Mudança

Mais conteúdo relacionado

Mais procurados

Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVNLuciano Lima
 
Sistemas de Controle de Versão
Sistemas de Controle de VersãoSistemas de Controle de Versão
Sistemas de Controle de VersãoJonathas Silva
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoFelipe
 
Git github tortoise git
Git github tortoise gitGit github tortoise git
Git github tortoise gitmaxrosan
 
Use o git e perca o medo de errar
Use o git e perca o medo de errarUse o git e perca o medo de errar
Use o git e perca o medo de errarBruno Calheira
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versãoMarcos Pessoa
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoFabricio Nogueira
 
SVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerSVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerTchelinux
 
Versionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo RosaVersionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo RosaTchelinux
 
Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesLeandro Cavalcante
 

Mais procurados (20)

Svn - grupo de estudos sol7
Svn - grupo de estudos sol7Svn - grupo de estudos sol7
Svn - grupo de estudos sol7
 
Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVN
 
Sistemas de Controle de Versão
Sistemas de Controle de VersãoSistemas de Controle de Versão
Sistemas de Controle de Versão
 
Jenkins workshop
Jenkins workshopJenkins workshop
Jenkins workshop
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de código
 
Ferramentas para versionamento Utilizando git
Ferramentas para versionamento Utilizando gitFerramentas para versionamento Utilizando git
Ferramentas para versionamento Utilizando git
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Git github tortoise git
Git github tortoise gitGit github tortoise git
Git github tortoise git
 
Git alem do basico
Git alem do basicoGit alem do basico
Git alem do basico
 
Use o git e perca o medo de errar
Use o git e perca o medo de errarUse o git e perca o medo de errar
Use o git e perca o medo de errar
 
Git para quem vem do SVN
Git para quem vem do SVNGit para quem vem do SVN
Git para quem vem do SVN
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
Git
GitGit
Git
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básico
 
SVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerSVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael Becker
 
Versionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo RosaVersionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
 
Apresentação controle de versão
Apresentação controle de versãoApresentação controle de versão
Apresentação controle de versão
 
Aprendendo Git
Aprendendo GitAprendendo Git
Aprendendo Git
 
Git e GitHub
Git e GitHubGit e GitHub
Git e GitHub
 
Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de Versões
 

Semelhante a Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - III workshop sinfo ufrn

Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágilClaudia Melo
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de ConfiguraçãoWagner Zaparoli
 
Integração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoIntegração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoMario Mendonça
 
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...Antonio Lobato
 
MiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIEMiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIECloves da Rocha
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlabJackson F. de A. Mafra
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETRenato Groff
 
Lecture 6 :: Gestão de Configuração de Software
Lecture 6 :: Gestão de Configuração de SoftwareLecture 6 :: Gestão de Configuração de Software
Lecture 6 :: Gestão de Configuração de SoftwareRogerio P C do Nascimento
 
Aula9 TEES UFS Gestao de Configuração de SW
Aula9 TEES UFS  Gestao de Configuração de SWAula9 TEES UFS  Gestao de Configuração de SW
Aula9 TEES UFS Gestao de Configuração de SWRogerio P C do Nascimento
 
Ferramenta de apoio a gerência de configuração de software
Ferramenta de apoio a gerência de configuração de softwareFerramenta de apoio a gerência de configuração de software
Ferramenta de apoio a gerência de configuração de softwareelliando dias
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Globalcode
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 

Semelhante a Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - III workshop sinfo ufrn (20)

Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágil
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de Configuração
 
Git e Github
Git e GithubGit e Github
Git e Github
 
Integração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoIntegração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimento
 
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Ferramenta git
Ferramenta gitFerramenta git
Ferramenta git
 
MiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIEMiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIE
 
Git + Github
Git + GithubGit + Github
Git + Github
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
 
Lecture 6 :: Gestão de Configuração de Software
Lecture 6 :: Gestão de Configuração de SoftwareLecture 6 :: Gestão de Configuração de Software
Lecture 6 :: Gestão de Configuração de Software
 
Aula9 TEES UFS Gestao de Configuração de SW
Aula9 TEES UFS  Gestao de Configuração de SWAula9 TEES UFS  Gestao de Configuração de SW
Aula9 TEES UFS Gestao de Configuração de SW
 
Gestão de Configuração de Software
Gestão de Configuração de Software Gestão de Configuração de Software
Gestão de Configuração de Software
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao Git
 
Ferramenta de apoio a gerência de configuração de software
Ferramenta de apoio a gerência de configuração de softwareFerramenta de apoio a gerência de configuração de software
Ferramenta de apoio a gerência de configuração de software
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!
 
Gitlab CI/CD com python
Gitlab CI/CD com pythonGitlab CI/CD com python
Gitlab CI/CD com python
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
Curso git-0001
Curso git-0001Curso git-0001
Curso git-0001
 

Mais de Jadson Santos

Containerizing a Web Application with Vue.js and Java
Containerizing a Web Application with Vue.js and JavaContainerizing a Web Application with Vue.js and Java
Containerizing a Web Application with Vue.js and JavaJadson Santos
 
Continuous Delivery with Jenkins
Continuous Delivery with JenkinsContinuous Delivery with Jenkins
Continuous Delivery with JenkinsJadson Santos
 
Cd with Github Travis CI and Heroku
Cd with Github Travis CI and HerokuCd with Github Travis CI and Heroku
Cd with Github Travis CI and HerokuJadson Santos
 
Jenkins Continuous Delivery
Jenkins Continuous DeliveryJenkins Continuous Delivery
Jenkins Continuous DeliveryJadson Santos
 
Introduction to angular with a simple but complete project
Introduction to angular with a simple but complete projectIntroduction to angular with a simple but complete project
Introduction to angular with a simple but complete projectJadson Santos
 
Hazelcast Distributed Lock
Hazelcast Distributed LockHazelcast Distributed Lock
Hazelcast Distributed LockJadson Santos
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao FlywayJadson Santos
 
Usando hiberante de forma otimizada
Usando hiberante de forma otimizadaUsando hiberante de forma otimizada
Usando hiberante de forma otimizadaJadson Santos
 
Usando JMeter para testar sua aplicação JSF
Usando JMeter para testar sua aplicação JSFUsando JMeter para testar sua aplicação JSF
Usando JMeter para testar sua aplicação JSFJadson Santos
 
ICEIS 2013 Presentation
ICEIS 2013 PresentationICEIS 2013 Presentation
ICEIS 2013 PresentationJadson Santos
 
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...Jadson Santos
 

Mais de Jadson Santos (17)

Containerizing a Web Application with Vue.js and Java
Containerizing a Web Application with Vue.js and JavaContainerizing a Web Application with Vue.js and Java
Containerizing a Web Application with Vue.js and Java
 
Continuous Delivery with Jenkins
Continuous Delivery with JenkinsContinuous Delivery with Jenkins
Continuous Delivery with Jenkins
 
Cd with Github Travis CI and Heroku
Cd with Github Travis CI and HerokuCd with Github Travis CI and Heroku
Cd with Github Travis CI and Heroku
 
Vue.js
Vue.jsVue.js
Vue.js
 
Jenkins Continuous Delivery
Jenkins Continuous DeliveryJenkins Continuous Delivery
Jenkins Continuous Delivery
 
Introduction to angular with a simple but complete project
Introduction to angular with a simple but complete projectIntroduction to angular with a simple but complete project
Introduction to angular with a simple but complete project
 
Hazelcast Distributed Lock
Hazelcast Distributed LockHazelcast Distributed Lock
Hazelcast Distributed Lock
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Java8
Java8Java8
Java8
 
Gradle
GradleGradle
Gradle
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao Flyway
 
Usando hiberante de forma otimizada
Usando hiberante de forma otimizadaUsando hiberante de forma otimizada
Usando hiberante de forma otimizada
 
Usando JMeter para testar sua aplicação JSF
Usando JMeter para testar sua aplicação JSFUsando JMeter para testar sua aplicação JSF
Usando JMeter para testar sua aplicação JSF
 
ICEIS 2013 Presentation
ICEIS 2013 PresentationICEIS 2013 Presentation
ICEIS 2013 Presentation
 
Enums
EnumsEnums
Enums
 
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
 

Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - III workshop sinfo ufrn

  • 1. Mini Curso Gerenciamento de Configuração e Mudança com GIT + Eclipse Jadson Santos Amador Pahim
  • 2. Gerenciamento de Configuração e Mudança § Gerenciamento de Configuração e Mudança § Padrões e Boas práticas de GCM § Sistema de controle de Versão Distribuído o Introdução ao GIT o Principais Comados o Resolvendo Conflitos o Feature Branch Workflow
  • 3. Gerenciamento de Configuração e Mudança Gerenciamento de Configuração e Mudança
  • 4. Gerenciamento de Configuração e Mudança GCM Define como a organização constrói e disponibiliza seu produtos e como identifica e rastreia as suas mudanças. Compreende fatores como: gerenciamento de build, gerenciamento do processo de desenvolvimento e fluxo de trabalho da equipe, controle de versão dos artefatos do software. Fundamental para vários modelos de processos consolidados como: RUP, MPS-BR e CMMI
  • 5. Gerenciamento de Configuração e Mudança GCM “Um conjunto de atividades projetadas para controlar as mudanças pela identificação dos produtos do trabalho que serão alterados, estabelecendo um relacionamento entre eles, definindo o mecanismo para o gerenciamento de diferentes versões destes produtos, controlando as mudanças impostas, e auditando e relatando as mudanças realizadas.” Roger Pressman, Software Engineering: A Practitioner's Approach
  • 6. Gerenciamento de Configuração e Mudança GCM Um bom processo de configuração e mudança permitirá um melhor controle sobre a evolução dos artefatos do código, evitando sua degradação com o tempo. Erro Aprimoramento Caso de Uso Código Fantasma Lixo Chapolin Será preciso um grande esforço manual para fazer com que coisas inacabadas não sejam disponibilizadas para os usuários finais
  • 7. Gerenciamento de Configuração e Mudança GCM Usar GCM apropriadamente pode fazer seu esforço de desenvolvimento diminuir e dá a flexibilidade que você precisa para trabalhar com eficiência
  • 8. Gerenciamento de Configuração e Mudança GCM É essencial planejar como vai ser o seu GCM antes de iniciar o desenvolvimento de um software
  • 9. Gerenciamento de Configuração e Mudança Terminologias
  • 10. Gerenciamento de Configuração e Mudança Workspace É o lugar onde o desenvolvedor mantém todos os artefatos que ele precisa para realizar uma tarefa Codeline É um conjunto de arquivos fontes e outros artefato que abrange algum componente de software a medida que eles mudam ao longo do tempo. Uma codeline contém todas as revisões de todos os artefatos ao longo de uma caminho evolutivo.
  • 11. Gerenciamento de Configuração e Mudança Codeline 1.0, 2.0,…, N.0 = Vesão da codeline ou tag. Tag Um label que identifica um snapshot da codeline contendo vários revisões de cada componente no codeline
  • 12. Gerenciamento de Configuração e Mudança Branch Uma Branch é uma versão de uma codeline como um todo que inicia na versão central (trunk ) e evolui independentemente. Merge Integração entre mudanças realizadas em uma codeline para outra.
  • 13. Gerenciamento de Configuração e Mudança Princípios Gerais
  • 14. Gerenciamento de Configuração e Mudança Princípios Gerais Há alguns princípios gerais que podem ser aplicados ao uso de CGM a todos os projetos de software. Porém os detalhes de como aplicá-los vai depender do tamanho e da natureza do projeto
  • 15. Gerenciamento de Configuração e Mudança Princípios Gerais Use controle de Versão: A maneira como a organização comunica trabalho desenvolvidos entre si mesma Faça Builds Periódicas e Integra Frequentemente: • Permite aos desenvolvedores verificarem o funcionamento do software quando as parte do software executam em conjunto. • Quanto frequente é esse período vai depender de detalhes internos de cada empresa. • Integração demora um certo tempo, então isso pode adicionar um overhead ao processo de desenvolvimento.
  • 16. Gerenciamento de Configuração e Mudança Princípios Gerais Permita Trabalho Autônomo: Cada membro da equipe deveria poder controlar que versão de que componente ele está trabalhando. Use Ferramentas: Se você tem muito processos manuais, erros ocorrerão com mais frequência
  • 17. Gerenciamento de Configuração e Mudança Padrões de GCM
  • 18. Gerenciamento de Configuração e Mudança Padrões de GCM Mainline Active Development Line Private Workspace Repository Private System Build Integration Build Third Party Codeline Task Level Commit Codeline Policy Smoke Test Unit Test Regression Test Private Versions Release Line Release-Prep Code Line Task Branch
  • 19. Gerenciamento de Configuração e Mudança Padrões MAIN LINE PATTERN: Esse padrão descreve como gerenciar a sua codeline para minimizar os esforços de integração. Parece natural criar várias codeline para organizar seu trabalho em alguns casos. Porém mais codelines significa mais merges O esforço do merge pode superar a aparente organização
  • 20. Gerenciamento de Configuração e Mudança Padrões Mau uso do Branches:
  • 21. Gerenciamento de Configuração e Mudança Padrões Mau uso do Branches:
  • 22. Gerenciamento de Configuração e Mudança Padrões MAIN LINE PATTERN: MAIN LINE: Uma codeline centralizada para servir de base para sub branches e merges que venham a ser necessários Use boas práticas de programação (integração contínua e testes automatizados) para assegurar que o que está na mainline é “usável”. Porém note que a MAIN LINE tem trabalho em progresso e nem sempre irá estar estável.
  • 23. Gerenciamento de Configuração e Mudança Padrões MAIN LINE PATTERN Benefícios: • Ter uma MAIN LINE reduz merges e esforço de sincronização • A MAIN LINE traz alterações de volta para o fluxo de trabalho global, em vez de deixá-las fragmentadas
  • 24. Gerenciamento de Configuração e Mudança Sistema de Controle de Versão Distribuído ( Git )
  • 25. Gerenciamento de Configuração e Mudança 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.
  • 26. Gerenciamento de Configuração e Mudança GIT Funcionamento Interno Commits Ponteiro Master
  • 27. Gerenciamento de Configuração e Mudança GIT Funcionamento Interno Master Branch 1 Criação de uma nova branch Ponteiros Commits
  • 28. Gerenciamento de Configuração e Mudança GIT Funcionamento Interno Master Branch 1 Merge entre a “Branch 1” com a “Master” apenas com mudança de ponteiros. Sem Cópias de Arquivos !!! Por isso o GIT consegue ser rápido e escalável. Master
  • 29. Gerenciamento de Configuração e Mudança Your Computer GIT FETCH Local Repository Remote Tracking Referência local ao repositório remoto Remote Repository FETCH O FETCH apenas atualiza a sua referência ao repositório remoto na área chamada de: “Remote Tracking”
  • 30. Gerenciamento de Configuração e Mudança GIT PULL (FETCH + MERGE) Your Computer Local Repository Remote Tracking Remote Repository MERGE FETCH Atualiza a sua referência ao repositório remoto e realiza o merge se existirem alterações localmente. Em caso de conflitos, marcará o seu código fonte local, será necessário editar os arquivos e remover o código não desejado e as marcações.
  • 31. Gerenciamento de Configuração e Mudança Your Computer GIT REBASE Local Repository Remote Tracking Novo commit local Novo commit remoto Remote Repository FETCH REBASE 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
  • 33. Gerenciamento de Configuração e Mudança Preparação do Ambiente hRp://git-­‐scm.com/downloads hRps://www.eclipse.org/downloads/
  • 34. Gerenciamento de Configuração e Mudança Clone a Git Repository h"ps://github.com/jadsonjs/workshopsinfo.git
  • 35. Gerenciamento de Configuração e Mudança Clone a Git Repository
  • 36. Gerenciamento de Configuração e Mudança Estrutura de um Projeto GIT Mesmos commits. Isso significa que o repositório local está atualizado com o remoto. Pelo mesmo desde a úl]ma fez que as referências ao remoto foram atualizadas
  • 37. Gerenciamento de Configuração e Mudança Estrutura de um Projeto GIT Observação: Diferentemente do SVN o GIT não salva o projeto no workspace do eclipse e sim dentro do repositório git local da sua máquina. Por padrão em: /Users/nome_usuario/git (MacOS) /home/nome_usuario/git (Linux) C:Documents and Settingsnome_usuariogit (Windows)
  • 38. Gerenciamento de Configuração e Mudança Team -> Commit Modificar um artefato de código e realizar um commit no repositório local
  • 39. Gerenciamento de Configuração e Mudança Team -> Push to Upstream Diferentemente do SVN, o commit não realizou nenhuma mudança do repositório remoto hRps://github.com/jadsonjs/workshopsinfo.git
  • 40. Gerenciamento de Configuração e Mudança Team -> Push to Upstream Push Realizado com sucesso
  • 41. Gerenciamento de Configuração e Mudança Team -> PULL • PULL atualiza o seu repositório local com o repositório remoto (PULL = FETCH + MERGE ) • Observação: Caso você já tenha realizado alguma modificação no repositório local (feito algum commit que não tenha sido enviado ao remoto), o PULL não é aconselhado, pois se tiver conflitos, ele irá “bagunçar” suas classes marcando os conflitos: >>>>>>>> v2e342as jadson@sinfo int a = 10; <<<<<<<< >>>>>>>> b66f8fk joao@sinfo int a = 20; <<<<<<<<
  • 42. Gerenciamento de Configuração e Mudança Resolvendo Conflitos • Duas pessoas modificaram a mesma classe na mesma linha. • Uma pessoa realizou o primeiro PUSH sem problemas. • A segunda pessoa tenta realizar o PUSH , da mesma classe, para o repositório remoto. O Git mostrará uma mensagem impeditiva
  • 43. Gerenciamento de Configuração e Mudança Team -> PUSH Irá gerar a mensagem Non-fast-forward
  • 44. Gerenciamento de Configuração e Mudança Team -> PUSH Non-fast-forward +- = não consegui encaminhar o seu commit de uma forma rápida porque o código do repositório remoto mudou, não está igual ao seu local, tem coisas novas lá. Você deve primeiro atualizar o seu repositório local para trazer o que há de novo no remoto, para só ai realizar o PUSH
  • 45. Gerenciamento de Configuração e Mudança Team -> FETCH from Upstream FETCH apenas atualiza a sua referência que você tem do repositório remoto. O seu código local continua da mesma forma que estava antes de realizar o FETCH.
  • 46. Gerenciamento de Configuração e Mudança Team -> REBASE 1 • O Rebase tenta recuperar todos os commits trazidos para o Remote Tracking pelo FETCH e jogar o seu commit para o top do history, como se o commit tivesse sido realizado depois dos commits novos no repositório remoto Seu commit que deu erro ao tentar fazer o PUSH Novos Commits no Remoto Novos Commits no Remoto Úl]mo Commit Local Antes da Modificação Seu commit que deu erro ao tentar fazer o PUSH Úl]mo Commit Local Antes da Modificação Rebase!
  • 47. Gerenciamento de Configuração e Mudança Team -> REBASE 2 • Após realizar o FECTH, para atualizar as referências no Remote Tracking, você então deve clicar em cima da referência remota do repositório e realizar um REBASE.
  • 48. Gerenciamento de Configuração e Mudança Team -> REBASE 3 Caso haja algum conflito a ser resolvido, o GIT pedirá para você resolver.
  • 49. Gerenciamento de Configuração e Mudança Team -> REBASE 4 A resolução de conflitos é igual ao SVN, mostrando os códigos fontes lado a lado.
  • 50. Gerenciamento de Configuração e Mudança Team -> REBASE 5 Ao solucionar o conflito, utilize a operação ADD TO INDEX para que a sua mudança realizada para resolver o conflito seja adiciona ao controle de versão e a classe deixe de ser mostrada como: “em conflito”. Equivalente à operação “mark as merge” do SVN
  • 51. Gerenciamento de Configuração e Mudança Team -> REBASE 6 Continuar para a próxima classe em conflito, até que todos os conflitos tenham sido resolvidos
  • 52. Gerenciamento de Configuração e Mudança Feature Branch Workflow Cada mudança (tarefa) deve ser feita em uma branch local separada. Isso ajuda a melhorar a organização do seu repositório local. Um PUSH pode não ser imediatamente incorporado ao repositório remoto, principalmente se no processo de desenvolvimento existir uma etapa de revisão de código e autorização. Seu PUSH poderá passar um tempo para ser aprovado, utilizar neste caso uma única branch local pode começar a ficar difícil de gerenciar as suas alterações.
  • 53. Gerenciamento de Configuração e Mudança Feature Branch Workflow Essa organização não é possível de ser feita com controle de versão centralizado como SVN, pois toda branch é remota • O ideal é que a branch master local não receba commits, apenas PULL do remoto. Ou seja, a branch master local deve ser “read only”, commits devem ser realizados apenas nas branches específicas de cada tarefa (feature)
  • 54. Gerenciamento de Configuração e Mudança Feature Branch Workflow Descrição do Fluxo “Branch por Tarefa”: 1º Vai Começar o trabalho estando na branch master local sem nenhum commit realizado localmente. Realiza um PULL para atualizar o repositório local com as ultimas mudanças no remoto. 2º Cria uma branch local a partir da master local e começa a fazer os commits da feature nessa banch. Ao realizar o PUSH se der algum problema, realizar o FETCH + REBASE na branch de trabalho local até conseguir enviar. 3º Enviou? Vai começar outra tarefa? Volta para a branch master local, realizar um PULL para atualizar a master local com as mudanças do remoto. Cria outra branch local para a nova tarefa e o fluxo se repete 4º Tarefa em produção ? Branch local da tarefa pode ser removida.
  • 55. Gerenciamento de Configuração e Mudança Feature Branch Workflow
  • 56. Gerenciamento de Configuração e Mudança Feature Branch Workflow
  • 57. Gerenciamento de Configuração e Mudança Feature Branch Workflow CUIDADO: Ao realizar o PUSH deve ser feita pela operação Remote -> PUSH .... Para escolher para qual branch remota deve ser enviado o seu commit. Se usar o “PUSH to Upstream” o eclipse por padrão envia o seu PUSH para uma branch remota de mesmo nome, que pode não ser a branch que você deseja enviar o commit
  • 58. Gerenciamento de Configuração e Mudança Feature Branch Workflow Escolha a branch local que você está no momento e a remota para onde o PUSH será enviado. Por exemplo, pode ser a master remota. Clique em Add Spec -> Finish
  • 59. Gerenciamento de Configuração e Mudança Feature Branch Workflow É possível fazer alternância entre as branches locais com a operação de checkout
  • 60. Gerenciamento de Configuração e Mudança Feature Branch Workflow Assim, caso o seu PUSH volte porque não foi aceito é possível votar para o código específico daquela tarefa, consertar o problema, enviar um novo PUSH e voltar para o branch local que você estava trabalhando. Quando a sua tarefa tiver em produção, o branch local pode ser removido, finalizado o fluxo.
  • 61. Gerenciamento de Configuração e Mudança Feature Branch Workflow Quando o seu PUSH for aceito, ao realizar o PULL para a branch master as suas alterações realizadas na branch serão incorporadas à branch master local. Ao criar uma nova branch local deve-se fazer sempre partindo da master local, assim o seu código local estará sempre atualizado com o repositório remoto.