O documento discute sistemas de controle de versão, introduzindo conceitos básicos, terminologia e ferramentas como Subversion. É dividido em seções sobre conceitos, terminologia, características, tipos centralizados e distribuídos, e comandos da ferramenta Subversion.
Sistemas de Controle de Versão: Conceitos e Prática com Subversion
1. Sistemas de Controle de
Versão
Conceitos, Subversion e prática
•Édipo Oliveira Maciel
•Jonathas Silva
•Leonardo Alexandre
2. Faça uma avaliação rápida da situação da sua
equipe de desenvolvimento:
• Alguém já sobrescreveu o código de outra pessoa
por acidente e acabou perdendo as alterações?
• Tem dificuldades em saber quais as alterações
efetuadas em um programa, quando foram feitas
e quem fez?
• Tem dificuldade em recuperar o código de uma
versão anterior que está em produção?
• Tem problemas em manter variações do sistema
ao mesmo tempo?
4. Roteiro
1. Conceito
2. Terminologias e Comandos;
3. Características e Usabilidade;
4. Subversion;
5. Comandos principais e específicos;
6. Na prática;
5. Conceito
Um software com a finalidade de gerenciar
diferentes versões no desenvolvimento de um
documento qualquer.
Esses sistemas são comumente utilizados no
desenvolvimento de software para controlar as
diferentes versões — histórico e
desenvolvimento — dos códigos-fontes e
também da documentação.
7. Terminologia Básica
• Repositório: Local onde são armazenados os arquivos
mantidos sob controle de versão;
• Área de trabalho: Cópia local dos arquivos de um
repositório, utilizada para o desenvolvimento
propriamente dito
• Módulo ou projeto: Conjunto independente de
arquivos; normalmente um repositório é constituído de
muitos módulos
8. Terminologia Básica
• Check-out: Operação inicial de criar uma área
de trabalho a partir de um módulo do
repositório;
• Update: Operação que atualiza a cópia local
com eventuais mudanças ocorridas no
repositório;
• Commit: Operação de efetuar mudanças em
um repositório, também chamada de check-in;
9. Pontos positivos
• Possibilitar compartilhamento de código-fonte e
desenvolvimento distribuído;
• Permitir controle de modificações e trabalho em
paralelo
• Auxiliar na qualidade do código e em sua
manutenção;
• Atrair novos colaboradores para projetos abertos
e expor sua evolução
10. E mais...
• Monitorar e registrar todas as alterações em um
ou mais arquivos;
• Permitir que as alterações possam ser
examinadas individualmente e revertidas caso
necessário;
• Possibilita que a “imagem” de um arquivo possa
ser obtida para qualquer instante de sua
história;
11. Características de um SCV
• Pode ser centralizado ou não, onde as alterações
sempre passam por um servidor central;
• Pode permitir somente armazenamento de
arquivos texto ou também de binários;
• Pode implementar mecanismo de locking para
evitar acessos simultâneos ou merging para
possibilitar edição concorrente;
• Pode dispor ou não de autenticação e controle de
acesso;
12. Tipos de SCV - Centralizado
• O controle de versão centralizado segue
a topologia em estrela, havendo apenas
um único repositório central mas várias cópias
de trabalho, uma para cada desenvolvedor. A
comunicação entre uma área de trabalho e outra
passa obrigatoriamente pelo repositório central.
14. Tipos de SCV - Distribuído
• São vários repositórios autônomos e
independentes, um para cada desenvolvedor.
Cada repositório possui uma área de trabalho
acoplada e as operações commit e update
acontecem localmente entre os dois.
17. Subversion
• Projeto livre mantido pela CollabNet
• Iniciado em 2000
• Tenta aprimorar o CVS e remover suas
limitações, contudo seguindo os mesmos
princípios básicos
• É o provável substituto do CVS em projetos de
Software Livre
• Versão atual: 1.2.1
18. Características
• É um sistema centralizado;
• O repositório pode ser local ou remoto;
• O acesso ao repositório é feito indiretamente;
• Permite fazer tanto locking quanto merging;
• Permite atribuir rótulos (tags);
• Possibilita criar ramificações (branches);
20. Vantagens
• Permite alterar nome, copiar ou mover arquivos
preservando seu histórico;
• Faz versionamento para diretórios;
• Commits são operações atômicas;
• Arquivos binários são tratados automaticamente
e apenas as diferenças são armazenadas
• Suporta links simbólicos;
• Branching é simples e eficiente;
21. Principais Comandos
• checkout: obter uma cópia de um diretório
para a área de trabalho local;
• commit: enviar as alterações da cópia local
para o repositório;
• update: atualizar a cópia local com eventuais
mudanças do repositório;
• add/remove: adicionar e remover arquivos do
repositório;
22. Principais Comandos
• import: importar para o repositório uma árvore
de diretórios sem versionamento;
• info: exibir informações sobre o repositório ou
arquivo especificado;
• diff: exibe alterações entre um arquivo e
revisões anteriores;
• status: exibe o estado atual de cada arquivo,
sem alterar a área de trabalho ou o repositório;