2. 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 - marco.rosner@gmail.com
3. 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 - marco.rosner@gmail.com
4. 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 - marco.rosner@gmail.com
5. 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 - marco.rosner@gmail.com
6. 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 - marco.rosner@gmail.com
7. 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 - marco.rosner@gmail.com
8. 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 - marco.rosner@gmail.com
9. 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 - marco.rosner@gmail.com
10. 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 - marco.rosner@gmail.com
11. 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 - marco.rosner@gmail.com
12. Sistema de Controle de Versão
Conceitos Fundamentais
- Como organizar sua cópia
de trabalho?
[DF 4] Marco Rosner - marco.rosner@gmail.com
13. 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 - marco.rosner@gmail.com
14. Sistema de Controle de Versão
CVS
Concurrent Versioning System
[DF 4] Marco Rosner - marco.rosner@gmail.com
15. 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 - marco.rosner@gmail.com
16. 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 - marco.rosner@gmail.com
17. 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 - marco.rosner@gmail.com
18. 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 - marco.rosner@gmail.com
19. 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 - marco.rosner@gmail.com
20. 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 - marco.rosner@gmail.com
21. 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 - marco.rosner@gmail.com
22. Sistema de Controle de Versão
SVN
[DF 4] Marco Rosner - marco.rosner@gmail.com
23. 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 - marco.rosner@gmail.com
24. 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 - marco.rosner@gmail.com
25. 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 - marco.rosner@gmail.com
26. Sistema de Controle de Versão
URL's
- file:///<servidor local>
- http://<servidor>
- https://<servidor>
- svn://<servidor>
- svn+ssh://<servidor>
[DF 4] Marco Rosner - marco.rosner@gmail.com
27. Sistema de Controle de Versão
Estrutura do repositório
$ /repositorio/format
/conf
/db
/hooks
/locks Estrutura da CT
$ /CT/projeto/Trunk
/Branches
/Tags
[DF 4] Marco Rosner - marco.rosner@gmail.com
28. 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 - marco.rosner@gmail.com
29. 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 - marco.rosner@gmail.com
30. 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 - marco.rosner@gmail.com
31. 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 - marco.rosner@gmail.com
32. 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 - marco.rosner@gmail.com
33. 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 trabalho
NEWREV – será o número da revisão HEAD do repositório
[DF 4] Marco Rosner - marco.rosner@gmail.com
34. 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 - marco.rosner@gmail.com
35. 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 - marco.rosner@gmail.com
36. 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 - marco.rosner@gmail.com
37. 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 - marco.rosner@gmail.com
38. 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_PATH
Exibe a descrição de todas as travas
$ svnadmin rmlocks REPOS_PATH LOCKED
Remove, incondicionalmente, uma ou mais travas de um repositório
[DF 4] Marco Rosner - marco.rosner@gmail.com
39. 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_PATH
Verifica os dados armazenados no repositório.
[DF 4] Marco Rosner - marco.rosner@gmail.com
40. Sistema de Controle de Versão
Conceitos gerenciais
svnlook
$ svnlook cat REPOS_PATH PATH_IN_REPOS
Mostra o conteúdo de um arquivo.
$ svnlook changed REPOS_PATH
Mostra os caminhos que foram mudados. Aceita a opção -r para
indicar revisões ou -t para transações.
$ svnlook diff REPOS_PATH
Mostra 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 - marco.rosner@gmail.com
41. 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_REPOS
Se o lock existir no caminho do repositório, o descreve.
$ svnlook log REPOS_PATH
Mostra a mensagem de log. Aceita a opção -r para indicar revisões ou -t
para transações.
[DF 4] Marco Rosner - marco.rosner@gmail.com
42. Sistema de Controle de Versão
Conceitos gerenciais
svnlook
$ svnlook proplist REPOS_PATH PATH_IN_REPOS
Exibe os nomes e valores de propriedades de arquivos e diretórios
versionados.
$ svnlook propget REPOS_PATH PATH_IN_REPOS
Exibe o valor cru de uma propriedade em um caminho no repositório.
[DF 4] Marco Rosner - marco.rosner@gmail.com
44. 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 - marco.rosner@gmail.com
45. 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 - marco.rosner@gmail.com
46. 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 - marco.rosner@gmail.com
47. 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 - marco.rosner@gmail.com
48. 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 - marco.rosner@gmail.com
49. 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 - marco.rosner@gmail.com
50. 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 - marco.rosner@gmail.com
51. 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 - marco.rosner@gmail.com
52. 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 - marco.rosner@gmail.com
53. 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 - marco.rosner@gmail.com