gerenciadores de controle de versão: git, mercurial e bazaar
DESCRIPTION
Apresentação apresentado e comparando os três controladores de versão: Git, Bazaar e Mercurial.TRANSCRIPT
Controle de versão: Git, Mercurial, Bazaar
Doutorado em Ciência da Computação
Disciplina de Software Livre, Prof. Dr. Fabio Kon
DINTER IME/USP-UTFPR
Fevereiro/2012
By Igor F. Steinmacher, Igor S. Wiese, Ivanilton Polato. These slides are licensed under the
Attibution-ShareAlike 3.0 Brasil License (CC BY-SA 3.0)
Roteiro
• Visão geral sobre controle de Versão
• Histórico
• Benefícios de um Sistema Gerenciador de Controle de Versão
• Diferenças entre Controle de Versão Central e Distribuído
• Operações Básicas
• Vocabulário comum
• Git, Mercurial, Bazaar
• Histórico
• Principais recursos (especificidades)
• Integração com outras ferramentas
• Comparativo
I – Conceitos básicos
http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/
X
Histórico
16 Junho kernel 2.6.12
2005
2000
1990
Centralizado
Distribuído
Dick Grune Criador
Outras fontes de informação CVS • http://cvs.nongnu.org/ • http://en.wikipedia.org/wiki/Concurrent_Versions_System
Subversion • http://subversion.apache.org/ • http://wiki.apache.org/subversion/ • http://en.wikipedia.org/wiki/SVN
CVS
Karl Fogel Líder do projeto SVN
Benefícios do Sistema Gerenciador de Controle de Versão (SCV)
Manter histórico Colaboração
Variações do projeto
Arquitetura de um SCV Centralizado
Adaptado de pronus.eng.br
Operações básicas de um SCV Centralizado
Operações básicas de um SCV Centralizado
Cada commit cria uma nova revisão, números sequenciais
Operações básicas de um SCV Centralizado
Sincronização no SCV Centralizado
Fonte: pronus.eng.br
Problemas SCV centralizado
Arquitetura de um SCV Distribuído
Fonte: pronus.eng.br
Operações Básicas de um SCV Distribuído
Fonte: pronus.eng.br
Sincronização no SCV Distribuído
Fonte: pronus.eng.br
II - SCV Distribuídos
Linus Torvalds Criador
Junio Hamano Mantenedor
Outras fontes de informação:
• http://git-scm.com/ • http://book.git-scm.com/ • https://git.wiki.kernel.org/ • http://en.wikipedia.org/wiki/Git_%28software%29
V2
Projetos que utilizam o Git
Workflow Básico
Comandos Básicos
1. git clone URL (= checkout SVN) • Clona um repositório
2. git checkout -b NOME_BRANCH • Cria um Branch. Uma das maiores vantagens do git é a facilidade de criar
branches e mesclá-los posteriormente via merge
• -b cria o branch
• checkout, faz você trocar de branch
3. git commit –a –m “MENSAGEM” • Como a ideia esta centrada na facilidade de merges e trabalho
distribuído, todo o trabalho é feito localmente, e deve ser gravado localmente (commit) em pequenas porções
• -a força o commit para TODOS os arquivos alterados
• -m para adicionar a mensagem
Comandos Básicos
4. git add NOME_ARQUIVO ou git add -i • Neste caso é feito um commit parcial. Após estes comandos deve ser
feito um commit sem o parâmetro –a
5. git checkout master git pull origin master
• Na primeira vez for realizado o comando pull deve ser informado de onde (origin) e para onde (master).
6. git checkout SEU_BRANCH git rebase master
• Quando as atualizações são trazidas do master é preciso sincronizar com as mudaças locais. Estas operações removem temporariamente as modificações do seu branch, aplicam os commits que estavam no master e reaplicam seus commits.
Comandos Básicos
7. git mergetool git rebase --continue
• Quando o git não consegue resolver os conflitos, o “rebase” é interrompido. Conflitos são tratados individualmente, diferentemente do SVN que faz tudo de uma única vez.
• -- continue é o parâmetro para continuar após cada conflito.
• o mergetool é uma ferramenta visual de tratamento de conflitos. Existem várias disponíveis:
• Meld: http://meld.sourceforge.net/install.html
• Diffuse: http://diffuse.sourceforge.net/
• SourceGear: http://www.sourcegear.com/diffmerge/downloads.php
Comandos Básicos
8. git checkout master git merge BRANCH_LOCAL git push origin master
• Quando o rebase é concluído seu repositório local esta compatível com o master.
• O comando git merge aplica seus commits no master.
• Push envia as alterações para o servidor remoto.
Matt Mackall Criador e Mantenedor
Outras fontes de informação:
• http://mercurial.selenic.com/ • http://mercurial.selenic.com/wiki/ • http://en.wikipedia.org/wiki/Mercurial • http://hgbook.red-bean.com/read/
V2
Release 1 janeiro
Projetos que utilizam o Mercurial
Hospedagem
Savannah
Comandos Básicos 1. hg clone REPOSITORIO
• Clona um projeto para o repositório local
2. hg add ARQUIVO • Adiciona um arquivo no repositório local
3. hg commit –m “MENSAGEM” • Efetiva e documenta alterações
4. hg branch NOME_BRANCH • Cria um branch
5. hg push • Publica modificações locais para outro repositório
6. hg pull • Sincroniza com outro repositório (local ou remoto)
7. hg update • Atualiza a revisão local para a revisão do repositório principal
8. hg merge • Mescla as alterções de um Branch com outro.
Martin Pool Criador e Mantenedor
Outras fontes de informação:
• http://bazaar.canonical.com/en/ • http://wiki.bazaar.canonical.com/Documentation • http://en.wikipedia.org/wiki/Bazaar_%28software%29
V2
20/01/2012 27/10/2011
Projetos que utilizam o Bazaar
Hospedagem
Savannah
III - Comparação
vs
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
Git vs Hg vs Bzr: Velocidade
http://pt.whygitisbetterthanx.com
Git vs Hg vs Bzr: Velocidade
0,000
0,050
0,100
0,150
0,200
git bzr hg
init
0,000
0,200
0,400
0,600
0,800
git bzr hg
add (1 arq.)
0,000
1,000
2,000
3,000
git bzr hg
add (2000 arq.)
0,000
0,500
1,000
git bzr hg
diff
0,000
5,000
10,000
git bzr hg
status (1 arq.)
0,000
0,200
0,400
0,600
0,800
git bzr hg
status (2000 arq.)
0,000
0,050
0,100
0,150
git bzr hg
tag
0,000
2,000
4,000
6,000
git bzr hg
log
0,000
0,500
1,000
1,500
git bzr hg
commit (1 arq.)
0,000
2,000
4,000
6,000
git bzr hg
commit (2000 arq.)
0,000
0,200
0,400
0,600
0,800
git bzr hg
branch (frio)
0,000
0,050
0,100
0,150
git bzr hg
branch(quente)
Testes realizados por Igor F. Steimacher, Igor S. Wiese e Ivanilton Polato em 01/02/2012
Git vs Hg vs Bzr: Tamanho do Repositório
http://pt.whygitisbetterthanx.com
Bzr* depois de rodar o Bzr pack
Git vs Hg vs Bzr: Tempo de Clone
SVN compardo com o checkout
http://pt.whygitisbetterthanx.com
Git vs Hg vs Bzr: Tamanho do Repositório e Tempo de Clone
0
50000
100000
150000
200000
250000
git bzr hg
tamanho
Testes realizados por Igor F. Steimacher, Igor S. Wiese e Ivanilton Polato em 01/02/2012
0,000
10,000
20,000
30,000
40,000
50,000
60,000
70,000
git bzr hg
clone local
Git vs Hg vs Bzr – Implementação
http://www.infoq.com/br/articles/dvcs-guide
By Igor Wiese, Igor Steinmacher, Ivanilton Polato. These slides are licensed under the
Attibution-ShareAlike 3.0 Brasil License (CC BY-SA 3.0)
Dúvidas?