Este documento fornece uma introdução aos sistemas de controle de versão (VCS), descrevendo seus principais benefícios, como funcionam, e exemplos de sistemas populares como Git e SVN. O documento também explica os principais conceitos por trás do Git, como objetos, blobs, árvores e commits, e como ele se diferencia de outros sistemas VCS.
3. Sistemas de Controlo
de Versões (VCS)
• software para gerir diferentes versões
• Conhecido vulgarmente como:
• Version Control System (VCS)
• Source Code Manager (SCM)
• Revision Control System (RCS)
Friday, December 2, 2011
5. Necessidades
• trabalhar / colaborar com mais pessoas
• guardar um histórico
• nunca perder o trabalho
• poder voltar atrás se algo correr mal
• bug tracking
Friday, December 2, 2011
15. SVN
• Em relação ao CVS:
• Mais rápido
• Menos informação transmitida
• Detecção automática de ficheiros que
mudaram de localização ou de nome
• Correcção de muitos bugs no CVS
http://tartarus.org/~simon/cvs-vs-svn.html
Friday, December 2, 2011
17. TeamWare
• commits locais
• não é preciso estar online
• distribuído (peer-to-peer)
http://docs.oracle.com/cd/E19957-01/806-3573/underhood.html
Friday, December 2, 2011
18. Git
http://git-scm.com
Friday, December 2, 2011
20. Git - Necessidades
• Facilitar o desenvolvimento distribuído
• Ser escalável
• Rápido e eficiente
• Repositórios mais pequenos (por ex. no
caso da Mozilla 30x)
https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html
Friday, December 2, 2011
21. Git - Necessidades
• Integridade e segurança dos dados
• Responsabilidade
• Imutabilidade
• Transações atómicas
https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html
Friday, December 2, 2011
22. Git - Necessidades
• Suportar, facilitar e encorajar a criação e
integração de branches
• Repositórios completos
• Arquitectura modular e extensível
• Software Livre
https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html
Friday, December 2, 2011
23. Git
• o conteúdo versus o ficheiro
• SHA1 versus revision number
• sem metadata
• branching e merging simplificado
http://peepcode.com/products/git-internals-pdf
Friday, December 2, 2011
24. Git
• tudo é guardado como um objecto
• dentro da directoria .git
• quatro tipos de objectos:
blob
tree
commit
tag
http://peepcode.com/products/git-internals-pdf
Friday, December 2, 2011
25. blob
• o conteúdo de ficheiros é guardado como
um blob
• sem metadados
Friday, December 2, 2011
26. blob
blob [content_size]
Your content here
lorem ipsum lorem ipsum
Friday, December 2, 2011
27. tree
• para directorias
• recursivo
• representação guardada em texto
Friday, December 2, 2011
28. tree
tree [content_size]
100644 blob b5f21a README
100644 blob afe433 Makefile.pl
040000 tree a42cd0 lib
Friday, December 2, 2011
29. commit
• permite criar o histórico
• contem um ponteiro para uma tree
• informação sobre o autor e a modificação
efectuada
Friday, December 2, 2011
30. commit
commit [content_size]
tree 23edfc
author Nuno Morgadinho <nuno@widgilabs.com>
committer Nuno Morgadinho <nuno@widgilabs.com>
commit without a parent
initial revision
Friday, December 2, 2011
31. tag
• trata-se de um “etiqueta” para um
determinado commit
• pode ter associada uma descrição
• assinada digitalmente via GPG
Friday, December 2, 2011
32. tag
tag [content_size]
object 123fec
type commit
tag v1
tagger Nuno Morgadinho <nuno@widgilabs.com>
123456789
release 1.0!
Friday, December 2, 2011
33. Em Resumo
Centralizados Distribuídos
CVS TeamWare
SVN Git
Friday, December 2, 2011
34. Outros
Centralizados Distribuídos
SCCS TeamWare
RCS Git
CVS Mercurial
SVN Bazaar
Friday, December 2, 2011
35. Outros
Centralizados Distribuídos
SCCS TeamWare
RCS Git
Livre CVS Mercurial
SVN Bazaar
BitKeeper
IBM Rational
Comercial Perforce
Code Co-op
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
Friday, December 2, 2011
36. Criar Repositório
$ mkdir myproject
$ cd myproject
$ git init
Initialized empty Git repository in .git/
Friday, December 2, 2011
46. Instalar o Git
• Linux
• sudo apt-get install git-core
• Mac
• http://code.google.com/p/git-osx-installer/
• Windows
• http://code.google.com/p/msysgit/
Friday, December 2, 2011
47. Ambiente de
Desenvolvimento
localmente staging produção
Friday, December 2, 2011
48. Ambiente de
Desenvolvimento
commit
localmente staging produção
Friday, December 2, 2011
49. Ambiente de
Desenvolvimento
commit
localmente staging produção
co
mm
it
github
Friday, December 2, 2011
50. Ambiente de
Desenvolvimento
commit
localmente staging produção
co
mm
pull
it
github
Friday, December 2, 2011
51. Ambiente de
Desenvolvimento
Testes
commit
localmente staging produção
co
mm
pull
it
github
Friday, December 2, 2011
52. Ambiente de
Desenvolvimento
Release
commit pull
localmente staging produção
co
mm
pull
it
github
Friday, December 2, 2011
53. Exercício I
• Criar um projecto no GitHub
• Adicionar ficheiros ao repositório
• Fazer commit
Friday, December 2, 2011
54. Exercício II
• Criar um branch experimental
• Merge
Friday, December 2, 2011