Sistemas de Controlo de Versões

59
Sistemas de Controlo de Versões Nuno Morgadinho <[email protected] > Friday, December 2, 2011

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

Page 1: Sistemas de Controlo de Versões

Sistemas de Controlo de Versões

Nuno Morgadinho <[email protected]>

Friday, December 2, 2011

Page 2: Sistemas de Controlo de Versões

Sistemas de Controlo de Versões?

Friday, December 2, 2011

Page 3: Sistemas de Controlo de Versões

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

Page 4: Sistemas de Controlo de Versões

Porquê?

Friday, December 2, 2011

Page 5: Sistemas de Controlo de Versões

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

Page 6: Sistemas de Controlo de Versões

O que não é um VCS?

Friday, December 2, 2011

Page 7: Sistemas de Controlo de Versões

Não são VCS

• Ficheiro .zip, .tar, .tgz, etc.

• Dropbox

• GMail

• Qualquer outra ferramenta de backup

Friday, December 2, 2011

Page 8: Sistemas de Controlo de Versões

Como funciona?

Repositório

Friday, December 2, 2011

Page 9: Sistemas de Controlo de Versões

Como funciona?

Repositório

Checkout

Friday, December 2, 2011

Page 10: Sistemas de Controlo de Versões

Como funciona?

Repositório

Checkout

modifica

Utilizador

Friday, December 2, 2011

Page 11: Sistemas de Controlo de Versões

Como funciona?

Repositório

Checkout

modifica

Utilizador

commit

Repositório

Friday, December 2, 2011

Page 12: Sistemas de Controlo de Versões

Repositório

João

Ana Pedro

Tiago

Centralizado

Friday, December 2, 2011

Page 13: Sistemas de Controlo de Versões

João

Ana Pedro

Tiago

Distribuído

Friday, December 2, 2011

Page 14: Sistemas de Controlo de Versões

CVS

Friday, December 2, 2011

Page 15: Sistemas de Controlo de Versões

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

Page 16: Sistemas de Controlo de Versões

Sun WorkShop TeamWare

Friday, December 2, 2011

Page 17: Sistemas de Controlo de Versões

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

Page 18: Sistemas de Controlo de Versões

Githttp://git-scm.com

Friday, December 2, 2011

Page 19: Sistemas de Controlo de Versões

Friday, December 2, 2011

Page 20: Sistemas de Controlo de Versões

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

Page 21: Sistemas de Controlo de Versões

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

Page 22: Sistemas de Controlo de Versões

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

Page 23: Sistemas de Controlo de Versões

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

Page 24: Sistemas de Controlo de Versões

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

Page 25: Sistemas de Controlo de Versões

blob

• o conteúdo de ficheiros é guardado como um blob

• sem metadados

Friday, December 2, 2011

Page 26: Sistemas de Controlo de Versões

blob

blob [content_size]Your content here

lorem ipsum lorem ipsum

Friday, December 2, 2011

Page 27: Sistemas de Controlo de Versões

tree

• para directorias

• recursivo

• representação guardada em texto

Friday, December 2, 2011

Page 28: Sistemas de Controlo de Versões

tree

tree [content_size]

100644 blob b5f21a README100644 blob afe433 Makefile.pl040000 tree a42cd0 lib

Friday, December 2, 2011

Page 29: Sistemas de Controlo de Versões

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

Page 30: Sistemas de Controlo de Versões

commitcommit [content_size]tree 23edfcauthor Nuno Morgadinho <[email protected]>committer Nuno Morgadinho <[email protected]>

commit without a parent

initial revision

Friday, December 2, 2011

Page 31: Sistemas de Controlo de Versões

tag

• trata-se de um “etiqueta” para um determinado commit

• pode ter associada uma descrição

• assinada digitalmente via GPG

Friday, December 2, 2011

Page 32: Sistemas de Controlo de Versões

tagtag [content_size]object 123fectype committag v1tagger Nuno Morgadinho <[email protected]> 123456789

release 1.0!

Friday, December 2, 2011

Page 33: Sistemas de Controlo de Versões

Em Resumo

CVSSVN

TeamWareGit

Centralizados Distribuídos

Friday, December 2, 2011

Page 34: Sistemas de Controlo de Versões

Outros

SCCSRCSCVSSVN

TeamWareGit

MercurialBazaar

Centralizados Distribuídos

Friday, December 2, 2011

Page 35: Sistemas de Controlo de Versões

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

Page 36: Sistemas de Controlo de Versões

$ mkdir myproject $ cd myproject $ git init Initialized empty Git repository in .git/

Criar Repositório

Friday, December 2, 2011

Page 37: Sistemas de Controlo de Versões

$ 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

Page 38: Sistemas de Controlo de Versões

$ 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

Page 39: Sistemas de Controlo de Versões

$ git log hello.pl commit c232a1cd16885e283e7122ee51ecebc029173e48 Author: Nuno Morgadinho <[email protected]> Date: Sun Nov 23 21:43:10 2011 +0000

initial content

Ver Histórico

Friday, December 2, 2011

Page 40: Sistemas de Controlo de Versões

$ git branch experiencia $ git branch experiencia * master

$ git checkout experiencia Switched to branch 'experiencia'

Criar Branch

Friday, December 2, 2011

Page 41: Sistemas de Controlo de Versões

$ 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

Page 42: Sistemas de Controlo de Versões

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

Page 43: Sistemas de Controlo de Versões

Friday, December 2, 2011

Page 44: Sistemas de Controlo de Versões

Friday, December 2, 2011

Page 45: Sistemas de Controlo de Versões

Friday, December 2, 2011

Page 46: Sistemas de Controlo de Versões

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

Page 47: Sistemas de Controlo de Versões

Ambiente de Desenvolvimento

localmente staging produção

Friday, December 2, 2011

Page 48: Sistemas de Controlo de Versões

Ambiente de Desenvolvimento

localmente staging produção

commit

Friday, December 2, 2011

Page 49: Sistemas de Controlo de Versões

Ambiente de Desenvolvimento

localmente staging produção

github

commit

commit

Friday, December 2, 2011

Page 50: Sistemas de Controlo de Versões

Ambiente de Desenvolvimento

localmente staging produção

github

commit

commit

pull

Friday, December 2, 2011

Page 51: Sistemas de Controlo de Versões

Ambiente de Desenvolvimento

localmente staging produção

github

commit

commit

pull

Testes

Friday, December 2, 2011

Page 52: Sistemas de Controlo de Versões

Ambiente de Desenvolvimento

localmente staging produção

github

commit

commit

pull

pull

Release

Friday, December 2, 2011

Page 53: Sistemas de Controlo de Versões

Exercício I

• Criar um projecto no GitHub

• Adicionar ficheiros ao repositório

• Fazer commit

Friday, December 2, 2011

Page 54: Sistemas de Controlo de Versões

Exercício II

• Criar um branch experimental

• Merge

Friday, December 2, 2011

Page 55: Sistemas de Controlo de Versões

Livros

Friday, December 2, 2011

Page 56: Sistemas de Controlo de Versões

Links

http://git-scm.com/

http://peepcode.com/products/git

http://peepcode.com/products/git-internals-pdf

Friday, December 2, 2011

Page 57: Sistemas de Controlo de Versões

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

Page 58: Sistemas de Controlo de Versões

Questões?

Friday, December 2, 2011

Page 59: Sistemas de Controlo de Versões

Obrigado

Nuno Morgadinho@morgadin

http://www.morgadinho.org

Friday, December 2, 2011