Controle de versões distribuído para projetos de software

36
GIT: Controle de Versões Distribuído para Projetos de Software Gilmar Pupo @gpupo Parte 1

description

Apresentação utilizada na parte 1 do treinamento "GIT: Controle de versões distribuído para projetos de software"

Transcript of Controle de versões distribuído para projetos de software

Page 1: Controle de versões distribuído para projetos de software

GIT: Controle de Versões Distribuído para Projetos

de Software

Gilmar Pupo@gpupo

Parte 1

Page 2: Controle de versões distribuído para projetos de software

Sobre @gpupo• Desenvolvedor e consultor em GTI

• Dependente de documentação, bookmarks e anotações

• Doctrine ORM, Symfony framework, Perl, Bash, Linux, jQuery mobile

• Membro e co-fundador do #maisagil

• Empreendedor no @hotellinux

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

www.gilmar.eti.br www.gpupo.com

= livro

Page 3: Controle de versões distribuído para projetos de software

Objetivos

• Entender o conceito distribuído• Entender os comandos básicos• Entender branching model

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 4: Controle de versões distribuído para projetos de software

Documentação

• Anote• Tweet #maisagil• www.delicious.com/gpupo/git

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 5: Controle de versões distribuído para projetos de software

Conceitos

• Transformar ou modernizar?• Estruturas convencionais atendem as

necessidades atuais?• Tecnologia versus Conhecimento• A guerra em fileiras ou em células?• Evolução organizacional

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 6: Controle de versões distribuído para projetos de software

Version control systemVCS

• um software para gerenciar diferentes versões de um documento qualquer

• o processo de guardar o histórico de alterações de diferentes arquivos

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Semelhante a slots em seu video game

Page 7: Controle de versões distribuído para projetos de software

Version control systemVCS

• Backup (?!)• Histórico• Trabalho em equipe• Marcação e resgate de versões

estáveis• Ramificações

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Construção facial

Page 8: Controle de versões distribuído para projetos de software

Modelo centralizado

• Repositório fica armazanedo em servidor central

• Desenvolvedores ao fazerem checkout, obtêm uma cópia da última revisão do repositório

• Somente usuários autorizados podem fazer commits (brecha de tempo!)

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 9: Controle de versões distribuído para projetos de software

Modelo centralizado

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 10: Controle de versões distribuído para projetos de software

Modelo centralizado

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 11: Controle de versões distribuído para projetos de software

Modelo distribuído

• Cada projeto é um repositório completo, com histórico total

• Independe de acesso à rede ou um servidor central, Commits podem ser feitos offline a qualquer momento

• Commits podem ser transferidos de um repositório para outro facilmente

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 12: Controle de versões distribuído para projetos de software

Modelo distribuído

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 13: Controle de versões distribuído para projetos de software

Modelo distribuído

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 14: Controle de versões distribuído para projetos de software

Modelo distribuído

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 15: Controle de versões distribuído para projetos de software

Modelo distribuído

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

http://t.co/7W3uxWo

• Modelo organizacional • Recursos da rede• Diffs velozes e furiosos• Clone do repositório local

Page 16: Controle de versões distribuído para projetos de software

Modelo distribuído

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Distributed Version Control

Systems

Distributed Version Control

Systems = DVCS

Page 17: Controle de versões distribuído para projetos de software

DVCSs

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

• BitKeeper• git• Mercurial• Bazaar• darcs• Monotone

Page 18: Controle de versões distribuído para projetos de software

GIT• Open Source (GPL v2)

• Originalmente escrito por Linus Torvalds em 2005

• Mantido por Junio Hamano

• Desenvolvido para manter o Kernel do Linux

• Sistema de controle de versões distribuído

• Foco em rapidez, eficiência e uso em grandes projetos

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 19: Controle de versões distribuído para projetos de software

GIT

Linus Torvalds

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

“How many have done a branch and merged it? How many of you enjoyed it?” “When you do a merge, you plan ahead for a week, then set aside a day to do it.”

“Some people have 5, 10, 15 branches”. One branch is experimental. One branch is maintenance, etc.

“CVS — you don’t commit. You make changes without committing. You never commit until it passes a giant test suite. People make 1-liner changes, knowing it can’t possibly break.”

Page 20: Controle de versões distribuído para projetos de software

GIT

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Histórico now!

Page 21: Controle de versões distribuído para projetos de software
Page 22: Controle de versões distribuído para projetos de software
Page 23: Controle de versões distribuído para projetos de software

Why!?

Page 24: Controle de versões distribuído para projetos de software

Why!?branches baratos(“ramificações”, "bifurcações", ou "galhos")

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 25: Controle de versões distribuído para projetos de software

Branches baratos•

Criar um branch para testar uma idéia, fazer commit algumas vezes, voltar para a partir de onde você fez o branch, aplicar um patch (conjunto de modificações), voltar para onde está experimentando, então fazer merge.

•Ter um branch que sempre contém somente o que vai para produção, outro onde você faz merge do trabalho para testar e várias outras menores para atividades do dia a dia.

•Criar novas branches para cada nova funcionalidade que estiver trabalhando, para que você possa mudar de uma para outra com facilidade, então deletar cada branch quando essa fizer merge dessa funcionalidade na linha principal.

•Criar um branch para experimentar, descobrir que não vai funcionar e somente deletá-la, abandonando o trabalho - sem que ninguém veja isso (mesmo se você tiver trabalhado outras branches no meio do caminho).

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 26: Controle de versões distribuído para projetos de software

Why!? Tudo é local• Existe muito

pouco fora de 'fetch', 'pull', 'push' que comunica de alguma maneira com qualquer coisa além do seu disco rígido.

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 27: Controle de versões distribuído para projetos de software

Why!? • Veloz• Social• Pequeno

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 28: Controle de versões distribuído para projetos de software

Why!?

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

●área intermediária

Page 29: Controle de versões distribuído para projetos de software

Area intermediária(staging ou index)

• você pode configurar como você quer que seu commit fique antes de fazê-lo.

• você pode facilmente ir colocando seus arquivos nela à medida que for terminando e então fazer commit deles sem fazer commit de todos os arquivos modificados, ou ter que listá-los na linha de comando durante o commit.

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 30: Controle de versões distribuído para projetos de software

Qualquer workflow• Você pode facilmente implementar

praticamente qualquer fluxo de trabalho que puder pensar com facilidade

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Até mesmo svn style!

Page 31: Controle de versões distribuído para projetos de software

Aderência

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

●6 meses de monitoramento●Desafogar a fila●Acompanhamento

Page 32: Controle de versões distribuído para projetos de software

?o.O

Page 33: Controle de versões distribuído para projetos de software

Projetos utilizando GIT

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

http://en.wikipedia.org/wiki/Git_(software)

AmarokAndroidCakePHPcURLDebianDiggEclipseFedoraGIMPGNOMEGTK+jQuery

Linux kernelLinux MintMaemoMeeGoMonoMooToolsOne Laptop Per Child (OLPC)PerlphpBBPrototype.js

QtRsyncRuby on RailsSambaStarlinkSugarXfceYahoo! UI LibraryZend FrameworkSymfony Framework

Page 34: Controle de versões distribuído para projetos de software

Resources

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

git.or.czgitcasts.comdel.icio.us/popular/git#git / #github

Page 35: Controle de versões distribuído para projetos de software

Perguntas?

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo

Page 36: Controle de versões distribuído para projetos de software

Parte 2 : Mão na massa....

Vai!

GIT SCM para Projetos de Software. @gpupoGIT SCM para Projetos de Software. @gpupo