Sistemas de Controlo de Versões

Post on 14-Dec-2014

413 views 2 download

description

Talk "Sistemas de Controlo de Versões", Seminários 2011/2012 - Mestrado em Eng. Informática, 28 November 2011

Transcript of Sistemas de Controlo de Versões

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

Githttp://git-scm.com

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