53
Sistema de Controle de Versão Marco Rosner - [email protected]

Controle de Versao

Embed Size (px)

Citation preview

Page 1: Controle de Versao

Sistema de Controle de Versão

Marco Rosner - [email protected]

Page 2: Controle de Versao

Sistema de Controle de Versão

Quem sou?

Marco Rosner

● Graduado em Sistemas de Informação pelo IFAL

● Técnico em Administração e Projeto de Redes pelo CET/IFAL

● Analista e desenvolvedor do SAEO● Desenvolvedor do Brisa● Amo perguntas! =)

[DF 4] Marco Rosner - [email protected]

Page 3: Controle de Versao

Sistema de Controle de Versão

Motivação

Independente da sua área de atuação, em algum momento, você irá trabalhar com Sistema de Controle de Versão.

E acredite, você já trabalha! Então, dominar este assunto é um diferencial competitivo necessário!

[DF 4] Marco Rosner - [email protected]

Page 4: Controle de Versao

Sistema de Controle de Versão

Importância

- Compartilhamento de documentos e versionamento deles- Permitir trabalho em paralelo e controlar as modificações- Facilidade de aplicar manutenção e gerenciar a qualidade- Possibilidade de trabalhar em equipe (e agregar mais pessoas a equipe)

[DF 4] Marco Rosner - [email protected]

Page 5: Controle de Versao

Sistema de Controle de Versão

Onde é aplicado o SCV?

- Wikis (Foswiki, Wikipedia...)- Processadores de texto (Google Docs...)- CMS (Joomla!, Drupal, Mambo, Plone...)- Projetos de softwares- Documentação de software

[DF 4] Marco Rosner - [email protected]

Page 6: Controle de Versao

Sistema de Controle de Versão

Agenda

- Conceitos fundamentais- CVS – Concurrent Versioning System

- O que é?- Principais comandos- Limitações

- Subversion (SVN)- O que é?- Comandos básicos- Comandos avançados- Comandos gerenciais

[DF 4] Marco Rosner - [email protected]

Page 7: Controle de Versao

Sistema de Controle de Versão

Agenda

- GIT- O que é?- Comandos básicos

- Referências*

*Isso aquí é só o começo! Preparem-se para estudar =)

[DF 4] Marco Rosner - [email protected]

Page 8: Controle de Versao

Sistema de Controle de Versão

Conceitos Fundamentais

- Repositório- Sistema de arquivo virtual

- Compartilhando documentos- Trabalho em equipe- Problema !!!- E agora José, a festa acabou?

Calma, a festa ta apenas começando...

[DF 4] Marco Rosner - [email protected]

Page 9: Controle de Versao

Sistema de Controle de Versão

Conceitos Fundamentais

- Solução 1: Lock-Modify-Unlock● Lock pode causar problemas administrativos● Locking pode causar serialização desnecessária

- Solução 2: Copy-Modify-Merge

[DF 4] Marco Rosner - [email protected]

Page 10: Controle de Versao

Sistema de Controle de Versão

Conceitos Fundamentais

- Cópias de Trabalho (CT)

- Revisões● calc/Makefile:2

integer.c:2 button.c:3

- Revisões Mistas● Atualizações e Submissões são separadas.

[DF 4] Marco Rosner - [email protected]

Page 11: Controle de Versao

Sistema de Controle de Versão

Conceitos Fundamentais (Terminologia)

- Check out/Clone● Cria uma CT do repositório*

- Update● Atualiza uma CT com a última versão do repositório

- Commit● Ato de submeter as alterações feitas na CT para o repositório

- Branch● Conjunto de arquivos separados do mainstream do projeto para

ser trabalhado separadamente.

- Trunk● Linha principal de trabalho do projeto

[DF 4] Marco Rosner - [email protected]

Page 12: Controle de Versao

Sistema de Controle de Versão

Conceitos Fundamentais

- Como organizar sua cópia de trabalho?

[DF 4] Marco Rosner - [email protected]

Page 13: Controle de Versao

Sistema de Controle de Versão

Ufa! Acabou a teoria, vamos à prática!!

Mas antes! Vamos fazer uma revisão...

- O que é um repositório?- Quais as duas soluções para o

compartilhamento de documentos?- Para que serve uma revisão?- Quais são os três comandos básicos de um

CVS?- O que é um Branch?

[DF 4] Marco Rosner - [email protected]

Page 14: Controle de Versao

Sistema de Controle de Versão

CVSConcurrent Versioning System

[DF 4] Marco Rosner - [email protected]

Page 15: Controle de Versao

Sistema de Controle de Versão

O que é?

- Sistema centralizado- Open Source- O repositório pode ser local ou remoto- As revisões começam em 1.1- Permite tanto locking quanto merging- Possibilita criar branches- Sua atual versão é 1.12.12

[DF 4] Marco Rosner - [email protected]

Page 16: Controle de Versao

Sistema de Controle de Versão

Estrutura de um repositório

$ $CVSROOT/<arquivos> /CVSROOT/<arquivos_do_cvs>

Estrutura da cópia de trabalho

$ <CT>/<nome_do_repositorio>/<arquivos> /CVS/arquivosCVS

[DF 4] Marco Rosner - [email protected]

Page 17: Controle de Versao

Sistema de Controle de Versão

Principais comandos

Montando um repositório

1 – Definir a localização e criar um repositório

$ export CVSROOT=~/repositorio$ cvs init

O diretorio indicado na variavel de ambiente $CVSROOT deve conceder premissão de leitura e escrita para todos que acessarão o repositório.

[DF 4] Marco Rosner - [email protected]

Page 18: Controle de Versao

Sistema de Controle de Versão

Principais comandos

Montando um repositório

2 – Criar e importar documentos ao repositório

$ mkdir ~/temp$ echo “Debian Festival” > ~/temp/teste.txt$ cd ~/temp$ cvs import -m “Importando documentos” projeto repositorio start

[DF 4] Marco Rosner - [email protected]

Page 19: Controle de Versao

Sistema de Controle de Versão

Principais comandos

Montando um repositório

3 – Fazer um check-out

$ mkdir ~/CopiaDeTrabalho$ cd ~/CopiaDeTrabalho$ cvs checkout projeto

[DF 4] Marco Rosner - [email protected]

Page 20: Controle de Versao

Sistema de Controle de Versão

Principais comandos

Montando um repositório

4 – Alterar e submeter documentos ao repositório

$ cd ~/CopiaDeTrabalho/projeto$ vim teste.txt$ cvs commit -m “Alteração do arquivo teste.txt”

[DF 4] Marco Rosner - [email protected]

Page 21: Controle de Versao

Sistema de Controle de Versão

Principais comandos

Montando um repositório

5 – Vendo o log das últimas transações

$ cd ~/CopiaDeTrabalho$ cvs update projeto$ cd projeto$ cvs log teste.txt

[DF 4] Marco Rosner - [email protected]

Page 22: Controle de Versao

Sistema de Controle de Versão

SVN

[DF 4] Marco Rosner - [email protected]

Page 23: Controle de Versao

Sistema de Controle de Versão

O que é?

- Criado pela CollabNet, em 2000- Baseado no CVS, também Open Source (APL)- Sistema centralizado- O repositório pode ser local ou remoto- Revisões incrementais- Permite tanto locking quanto merging- Possibilita criar branches e tags- Sua atual versão é 1.6.3

[DF 4] Marco Rosner - [email protected]

Page 24: Controle de Versao

Sistema de Controle de Versão

Quem usa?

- Apache Software Fundation- Free Pascal- FreeBSD- GCC- Python- Django- Mono- SourceForge.net- PHP- Google Code- BRisa

[DF 4] Marco Rosner - [email protected]

Page 25: Controle de Versao

Sistema de Controle de Versão

Características

- Versionamento de diretórios- Histórico de versões efetivo- Commits atômico- Versionamento de metadados- Branch e Tag eficientes

[DF 4] Marco Rosner - [email protected]

Page 26: Controle de Versao

Sistema de Controle de Versão

URL's

- file:///<servidor local>- http://<servidor>- https://<servidor>- svn://<servidor>- svn+ssh://<servidor>

[DF 4] Marco Rosner - [email protected]

Page 27: Controle de Versao

Sistema de Controle de Versão

Estrutura do repositório

$ /repositorio/format /conf /db /hooks /locks

[DF 4] Marco Rosner - [email protected]

Estrutura da CT

$ /CT/projeto/Trunk /Branches /Tags

Page 28: Controle de Versao

Sistema de Controle de Versão

Comandos básicos

1 - Criando um repositório e importando arquivos

$ svnadmin create ~/repositorioSVN$ mkdir ~/temp$ cd ~/temp$ echo “Debian Festival” > teste.txt$ svn import ~/temp file:///home/<user>/repositorioSVN -m “Importando teste.txt”

[DF 4] Marco Rosner - [email protected]

Page 29: Controle de Versao

Sistema de Controle de Versão

Comandos básicos

2 – Dando um checkout

$ mkdir ~/trabalhoSVN$ cd ~/trabalhoSVN$ svn checkout file:///home/<user>/repositorioSVN ~/trabalhoSVN/projeto

[DF 4] Marco Rosner - [email protected]

Page 30: Controle de Versao

Sistema de Controle de Versão

Comandos básicos

3 – Alterando arquivo e submetendo ao repositório

$ cd ~/trabalhoSVN/projeto$ vim teste.txt$ svn status$ svn commit -m “Alteração no arquivo teste.txt”$ svn update

[DF 4] Marco Rosner - [email protected]

Page 31: Controle de Versao

Sistema de Controle de Versão

Comandos básicos

4 – Verificando o log

$ cd ~/trabalhoSVN/projeto$ svn log teste.txt

5 – Adicionando uma pasta ao repositório

$ mkdir trunk branches$ svn add trunk branches (svn del <arq_ou_dir>)$ svn commit -m “Organizando cópia de trabalho”

[DF 4] Marco Rosner - [email protected]

Page 32: Controle de Versao

Sistema de Controle de Versão

Comandos úteis

$ svn diff [-r[N:M]] <arquivo>- Mostra as diferenças entre a cópia de trabalho e a última versão

atualizada.

$ svn status

$ svn info <arq_dir>

[DF 4] Marco Rosner - [email protected]

Page 33: Controle de Versao

Sistema de Controle de Versão

Arquivos em conflitos

- arquivo.mine- arquivo.rOLDREV- arquivo.rNEWREV

$ svn resolved <arquivo/url>

OLDREV – será sempre o número da revisão da sua cópia de trabalhoNEWREV – será o número da revisão HEAD do repositório

[DF 4] Marco Rosner - [email protected]

Page 34: Controle de Versao

Sistema de Controle de Versão

Conceitos avançados

Propriedades

- svn:autor- svn:date- svn:log

$ svn propset <propriedade> <valor> <arq_dir>$ svn propget <propriedade> <arq_dir>$ svn propedit <propriedade> <arq_dir>$ svn proplist <arq_dir>

[DF 4] Marco Rosner - [email protected]

Page 35: Controle de Versao

Sistema de Controle de Versão

Conceitos avançados

Travamento

$ svn lock <arquivo>$ svn unlock <arquivo>

$ svn commit -m “Trava efetuada para <arquivo>”

[DF 4] Marco Rosner - [email protected]

Page 36: Controle de Versao

Sistema de Controle de Versão

Conceitos avançados

Ramos (Branches) e Tags

$ svn copy SRC DSC$ svn merge -r REV1:REV2 <arquivo/url>$ svn revert <arquivo/url>

[DF 4] Marco Rosner - [email protected]

Page 37: Controle de Versao

Sistema de Controle de Versão

Conceitos gerenciais

Ganchos (hooks)

$ cd ~/repositorioSVN/hooks

- post-commit.tmpl- post-[un]lock.tmpl- pre-commit.tmpl- pre-[un]lock.tmpl- start-commit.tmpl

[DF 4] Marco Rosner - [email protected]

Page 38: Controle de Versao

Sistema de Controle de Versão

Conceitos gerenciais

svnadmin

$ svnadmin dump REPOS_PATH [-r rev1:rev2] [--incremental]Despeja o conteúdo do sistema de arquivos para o stdout

$ svnadmin lslocks REPOS_PATHExibe a descrição de todas as travas

$ svnadmin rmlocks REPOS_PATH LOCKEDRemove, incondicionalmente, uma ou mais travas de um repositório

[DF 4] Marco Rosner - [email protected]

Page 39: Controle de Versao

Sistema de Controle de Versão

Conceitos gerenciais

svnadmin

$ svnadmin setlog REPOS_PATH [-r rev] <arq>Define a mensagem de log de uma revisão

$ svnadmin verify REPOS_PATHVerifica os dados armazenados no repositório.

[DF 4] Marco Rosner - [email protected]

Page 40: Controle de Versao

Sistema de Controle de Versão

Conceitos gerenciais

svnlook

$ svnlook cat REPOS_PATH PATH_IN_REPOSMostra o conteúdo de um arquivo.

$ svnlook changed REPOS_PATHMostra os caminhos que foram mudados. Aceita a opção -r para indicar revisões ou -t para transações.

$ svnlook diff REPOS_PATHMostra as diferenças de arquivos e propriedades que foram mudadas. Aceita a opção -r para indicar revisões ou -t para transações.

[DF 4] Marco Rosner - [email protected]

Page 41: Controle de Versao

Sistema de Controle de Versão

Conceitos gerenciais

svnlook

$ svnlook info REPOS_PATH Mostra o autor, data-hora, tamanho da mensagem de log, e a mensagem de log. Aceita a opção -r para indicar revisões ou -t para transações.

$ svnlook lock REPOS_PATH PATH_IN_REPOSSe o lock existir no caminho do repositório, o descreve.

$ svnlook log REPOS_PATHMostra a mensagem de log. Aceita a opção -r para indicar revisões ou -t para transações.

[DF 4] Marco Rosner - [email protected]

Page 42: Controle de Versao

Sistema de Controle de Versão

Conceitos gerenciais

svnlook

$ svnlook proplist REPOS_PATH PATH_IN_REPOSExibe os nomes e valores de propriedades de arquivos e diretórios versionados.

$ svnlook propget REPOS_PATH PATH_IN_REPOSExibe o valor cru de uma propriedade em um caminho no repositório.

[DF 4] Marco Rosner - [email protected]

Page 43: Controle de Versao

Sistema de Controle de Versão

[DF 4] Marco Rosner - [email protected]

Page 44: Controle de Versao

Sistema de Controle de Versão

O que é?

- Criado por Linus Torvalds, em 2005- GIT = Estupido- Licenciado pela GPLv2- Sistema distribuído- Independe de um servidor central oiu da rede.- Revisões incrementais- Permite tanto locking quanto merging- Possibilita criar branches e tags- Sua atual versão é 1.6.4

[DF 4] Marco Rosner - [email protected]

Page 45: Controle de Versao

Sistema de Controle de Versão

Quem usa?

- Android- Fedora- GNOME- Linux Kernel- One Laptop Per Child- Perl- Qt- Ruby on Rails- Samba- Wine- X.org Server

[DF 4] Marco Rosner - [email protected]

Page 46: Controle de Versao

Sistema de Controle de Versão

Características

- Desenvolvimento distribuído- Acesso ao repositorio por HTTP, FTP, rsync ou pelo protocolo GIT- Ferramenta git-svn- Escrito em C- Facilidade de criação e combinação (merge) de branchs

[DF 4] Marco Rosner - [email protected]

Page 47: Controle de Versao

Sistema de Controle de Versão

Comandos básicos

1 – Criando o repositório e adicionando os arquivos do projeto

$ mkdir ~/trabalhoGIT$ cd ~/trabalhoGIT$ git init(criar/copiar arquivo)$ git commit -a -m “Iniciando repositório”

[DF 4] Marco Rosner - [email protected]

Page 48: Controle de Versao

Sistema de Controle de Versão

Comandos básicos

2 – Verificando o status do projeto

(editar arquivo)$ git status

3 – Navegando pelo log do projeto

$ git log [<arq_dir> / <commit_id>]

[DF 4] Marco Rosner - [email protected]

Page 49: Controle de Versao

Sistema de Controle de Versão

Comandos básicos

4 – Criando um branch

$ git branch calc

5 – Mudando de branch e efetuando merge

$ git checkout calc(editar arquivo)$ git commit -a -m “Editando arq no branch x”$ git checkout master$ git merge calc

[DF 4] Marco Rosner - [email protected]

Page 50: Controle de Versao

Sistema de Controle de Versão

Agradecimentos

Obrigado pela sua presença neste mini-curso

Qualquer dúvida, fico a disposição através do e-mail.

[DF 4] Marco Rosner - [email protected]

Page 51: Controle de Versao

Sistema de Controle de Versão

Referências bibliográficas

CVS

- http://www.nongnu.org/cvs/- http://en.wikipedia.org/wiki/Concurrent_Versions_System- http://cvsbook.red-bean.com/

[DF 4] Marco Rosner - [email protected]

Page 52: Controle de Versao

Sistema de Controle de Versão

Referências bibliográficas

SVN

- http://subversion.tigris.org/- http://svnbook.red-bean.com/- http://en.wikipedia.org/wiki/Subversion_(software)

[DF 4] Marco Rosner - [email protected]

Page 53: Controle de Versao

Sistema de Controle de Versão

Referências bibliográficas

GIT

- http://git-scm.com/- http://en.wikipedia.org/wiki/Git_(software)- Google tech talk: Linus Torvalds on git (http://www.youtube.com/watch?v=4XpnKHJAok8)

[DF 4] Marco Rosner - [email protected]