Sistemas de Controle de
 Versão
 Conceitos, Subversion e prática



•Édipo Oliveira Maciel
•Jonathas Silva
•Leonardo Alexandre
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?
E agora?!
Roteiro
1.   Conceito
2.   Terminologias e Comandos;
3.   Características e Usabilidade;
4.   Subversion;
5.   Comandos principais e específicos;
6.   Na prática;
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.
Idéia Geral
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
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;
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
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;
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;
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.
Centralizado
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.
Tipos de SCV - Distribuído
Ferramenta Subversion
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
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);
Características
• As revisões são sempre
globais,começando em 0
(com o repositório vazio)
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;
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;
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;
Praticando...

Sistemas de Controle de Versão

  • 1.
    Sistemas de Controlede Versão Conceitos, Subversion e prática •Édipo Oliveira Maciel •Jonathas Silva •Leonardo Alexandre
  • 2.
    Faça uma avaliaçãorá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?
  • 3.
  • 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 softwarecom 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.
  • 6.
  • 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 • Possibilitarcompartilhamento 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... • Monitorare 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 umSCV • 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.
  • 13.
  • 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.
  • 15.
    Tipos de SCV- Distribuído
  • 16.
  • 17.
    Subversion • Projeto livremantido 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);
  • 19.
    Características • As revisõessão sempre globais,começando em 0 (com o repositório vazio)
  • 20.
    Vantagens • Permite alterarnome, 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;
  • 23.