sistemas de controlo de versões
Post on 14-Dec-2014
413 Views
Preview:
DESCRIPTION
TRANSCRIPT
Sistemas de Controlo de Versões
Nuno Morgadinho <nuno@widgilabs.com>
Friday, December 2, 2011
Sistemas de Controlo de Versões?
Friday, December 2, 2011
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
Porquê?
Friday, December 2, 2011
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
O que não é um VCS?
Friday, December 2, 2011
Não são VCS
• Ficheiro .zip, .tar, .tgz, etc.
• Dropbox
• GMail
• Qualquer outra ferramenta de backup
Friday, December 2, 2011
Como funciona?
Repositório
Friday, December 2, 2011
Como funciona?
Repositório
Checkout
Friday, December 2, 2011
Como funciona?
Repositório
Checkout
modifica
Utilizador
Friday, December 2, 2011
Como funciona?
Repositório
Checkout
modifica
Utilizador
commit
Repositório
Friday, December 2, 2011
Repositório
João
Ana Pedro
Tiago
Centralizado
Friday, December 2, 2011
João
Ana Pedro
Tiago
Distribuído
Friday, December 2, 2011
CVS
Friday, December 2, 2011
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
Sun WorkShop TeamWare
Friday, December 2, 2011
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
Friday, December 2, 2011
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
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
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
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
Git
• tudo é guardado como um objecto
• dentro da directoria .git
• quatro tipos de objectos:
http://peepcode.com/products/git-internals-pdf
blobtreecommittag
Friday, December 2, 2011
blob
• o conteúdo de ficheiros é guardado como um blob
• sem metadados
Friday, December 2, 2011
blob
blob [content_size]Your content here
lorem ipsum lorem ipsum
Friday, December 2, 2011
tree
• para directorias
• recursivo
• representação guardada em texto
Friday, December 2, 2011
tree
tree [content_size]
100644 blob b5f21a README100644 blob afe433 Makefile.pl040000 tree a42cd0 lib
Friday, December 2, 2011
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
commitcommit [content_size]tree 23edfcauthor Nuno Morgadinho <nuno@widgilabs.com>committer Nuno Morgadinho <nuno@widgilabs.com>
commit without a parent
initial revision
Friday, December 2, 2011
tag
• trata-se de um “etiqueta” para um determinado commit
• pode ter associada uma descrição
• assinada digitalmente via GPG
Friday, December 2, 2011
tagtag [content_size]object 123fectype committag v1tagger Nuno Morgadinho <nuno@widgilabs.com> 123456789
release 1.0!
Friday, December 2, 2011
Em Resumo
CVSSVN
TeamWareGit
Centralizados Distribuídos
Friday, December 2, 2011
Outros
SCCSRCSCVSSVN
TeamWareGit
MercurialBazaar
Centralizados Distribuídos
Friday, December 2, 2011
Outros
SCCSRCSCVSSVN
TeamWareGit
MercurialBazaar
IBM RationalPerforce
BitKeeperCode Co-op
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
Centralizados Distribuídos
Livre
Comercial
Friday, December 2, 2011
$ mkdir myproject $ cd myproject $ git init Initialized empty Git repository in .git/
Criar Repositório
Friday, December 2, 2011
$ vi hello.pl $ git add hello.pl $ git commit -m “initial content” [master (root-commit) c232a1c] initial 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 hello.pl
Adicionar Ficheiro
Friday, December 2, 2011
$ vi hello.pl $ git add hello.pl $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: hello.pl #
$ git commit -m “initial content” [master (root-commit) c232a1c] initial 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 hello.pl
$ git status # On branch master nothing to commit (working directory clean)
Adicionar Ficheiro
Friday, December 2, 2011
$ git log hello.pl commit c232a1cd16885e283e7122ee51ecebc029173e48 Author: Nuno Morgadinho <nuno@widgilabs.com> Date: Sun Nov 23 21:43:10 2011 +0000
initial content
Ver Histórico
Friday, December 2, 2011
$ git branch experiencia $ git branch experiencia * master
$ git checkout experiencia Switched to branch 'experiencia'
Criar Branch
Friday, December 2, 2011
$ git merge experiencia Auto-merging hello.pl CONFLICT (content): Merge conflict in hello.pl Automatic merge failed; fix conflicts and then commit the result.
$ git add hello.pl $ git commit -m “resolving conflict”
Merge Branch
Friday, December 2, 2011
Git Stash
$ git pull Git pull: error: Entry foo not uptodate. Cannot merge
$ git stash save Saved “WIP on master: e71813e...”
$ git pull $ git stash pop
Friday, December 2, 2011
Friday, December 2, 2011
Friday, December 2, 2011
Friday, December 2, 2011
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
Ambiente de Desenvolvimento
localmente staging produção
Friday, December 2, 2011
Ambiente de Desenvolvimento
localmente staging produção
commit
Friday, December 2, 2011
Ambiente de Desenvolvimento
localmente staging produção
github
commit
commit
Friday, December 2, 2011
Ambiente de Desenvolvimento
localmente staging produção
github
commit
commit
pull
Friday, December 2, 2011
Ambiente de Desenvolvimento
localmente staging produção
github
commit
commit
pull
Testes
Friday, December 2, 2011
Ambiente de Desenvolvimento
localmente staging produção
github
commit
commit
pull
pull
Release
Friday, December 2, 2011
Exercício I
• Criar um projecto no GitHub
• Adicionar ficheiros ao repositório
• Fazer commit
Friday, December 2, 2011
Exercício II
• Criar um branch experimental
• Merge
Friday, December 2, 2011
Livros
Friday, December 2, 2011
Links
http://git-scm.com/
http://peepcode.com/products/git
http://peepcode.com/products/git-internals-pdf
Friday, December 2, 2011
Conclusão
• Git é rápido, open-source, eficiente e distribuído
• Não há desculpa para não se usar um VCS!
Friday, December 2, 2011
Questões?
Friday, December 2, 2011
Obrigado
Nuno Morgadinho@morgadin
http://www.morgadinho.org
Friday, December 2, 2011
top related