exatasfepi.com.br Controle de Versão André Luís Duarte
Bibliografia Version Control with Subversion: For Subversion 1.7: (Compiled from r4875) by Ben Collins- Sussman, Brian W. Fitzpatrick, and C. Michael Pilato Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato TortoiseSVN A Subversion client for Windows Version 1.4.5 2
Controle de Versão Motivação Conceitos VisualSVN Tortoise 3
Controle de Versão Motivação Conceitos VisualSVN Tortoise 4
Motivação Controle de versão é a arte de administrar as mudanças em documentos É uma ferramenta crítica para desenvolvedores Investem horas modificando seus projetos e então desfazem ou revisam algumas dessas modificações no dia seguinte 5
Motivação Imagine uma equipe de vários desenvolvedores mudando constantemente os documentos 6
Motivação Porque controlar versão? Gestão da Qualidade Qualidade é um conceito abstrato e pode ser definido de forma diferente para cada processo e pessoa envolvidos Depende das características que se deseja avaliar 7
Motivação Qualidade de Software Está diretamente á qualidade do processo de desenvolvimento Atualmente aborda conceitos tais como: Verificação e validação Revisões e autorias Gerência de qualidade de software Revisão: habilidade para ser alterado Adaptabilidade a novos ambientes 8
Motivação Antigamente: Changelog: arquivo texto que continham informações sobre o que foi alterado em um projeto Histórico de alterações: comentários que eram inseridos no início de um arquivo de interface ou no início dos métodos no código fonte (p.e.:.h e.cpp) 9
Motivação 10
Motivação Assumindo essas soluções: Era difícil comparar diferentes versões de arquivos Era trabalhoso procurar autorias de códigos Cada desenvolvedor tinha que manter cópias do projeto para conseguir retornar a um ponto anterior Era quase impossível garantir que todos seguiam uma única forma de criação 11
Motivação Com a adoção de um sistema de gerenciamento de versão (versionamento) podemos literalmente navegar no tempo 12
Motivação Alterações que degradem a qualidade do projeto podem simplesmente ser abandonadas 13
Motivação Podemos ver um estado específico do projeto e recuperá-lo imediatamente 14
Motivação Versionamento é um requisito indispensável na garantia de que documentos são mantidos de forma profissional, garantindo a manutenção e rastreabilidade de alterações e versões 15
Motivação 16
Controle de Versão Motivação Conceitos Subversion Tortoise 17
Conceitos Repositório Central de armazenamento de arquivos versionados com seu histórico completo Pode estar centralizado em um servidor abastecendo seus clientes Pode estar distribuído sendo necessária a sincronização eventual 18
Conceitos Subversion é mais do que um repositório de arquivos pois: Lembra de cada alteração ocorrida: Nos arquivos Na árvore de diretórios 19
Conceitos Pode responder perguntas como: O que o diretório continha na última quarta feira? Quem foi a última pessoa que alterou o arquivo? Quais alterações foram realizadas? 20
Conceitos Problema do compartilhamento de arquivos: Como evitar que usuários sobrescrevam as alterações feitas por outros no mesmo arquivo? Como evitar que os usuários tropecem uns nos outros? 21
Conceitos Cenário: Harry e Sally são colegas de trabalho e decidiram editar ao mesmo tempo o mesmo documento no repositório. 22
Conceitos 23
Conceitos Alocar-Modificar-Desalocar Solução simples que consiste em permitir somente que uma pessoa por vez altere um arquivo Qualquer acesso posterior somente para realizar leitura Depois de liberado outra pessoa poderá realizar operações de escrita no arquivo 24
Conceitos 25
Conceitos Pode causar problemas administrativos caso Harry saia de férias e esqueça de desalocar o arquivo 26
Conceitos Pode causar serialização desnecessária se Harry e Sally fossem alterar áreas diferentes do mesmo arquivo 27
Conceitos Pode causar uma falsa sensação de segurança Suponha que Harry edite o arquivo A e Sally um arquivo B. B dependem de A para gerar um resultado correto, esta dependência pode ter sido quebrada A B Resultado Gera x Gera y Resultado correto 28
Conceitos Este tipo de solução funciona melhor quando os arquivos não puderem ser unificados, por exemplo, alterações em arquivos de imagem 29
Conceitos Copiar-Modificar-Unificar Cada usuário lê o repositório e cria uma cópia de trabalho pessoal que será alterada Ao final, cada cópia local é unificada com uma nova versão no repositório, uma versão mais atual Se ocorrerem problemas durante a unificação, os usuários decidem como ficará a versão final 30
Conceitos 31
Conceitos 32
Conceitos No caso apresentado, suponha que Harry e Sally tenham alterado o mesmo arquivo na mesma área, Harry será informado que existem conflitos que devem ser solucionados Em parceria ambos decidem qual a melhor versão deverá ser enviada ao repositório 33
Conceitos Por fim o Subversion permite que trabalhemos tanto com a política alocarmodificar-desalocar quanto a política de copiar-modificar-unificar 34
Conceitos Cópia de trabalho É uma estrutura de diretórios contendo um conjunto de arquivos Existe também um diretório.svn chamado de diretório administrativo da cópia de trabalho Através deste diretório o Subversion reconhece as alterações realizadas e quais foram os arquivos modificados 35
Conceitos Para iniciar o trabalho cada usuário deve obter uma subestrutura do repositório Após realizar as alterações o usuário deve submeter as alterações para o repositório Se cópia de trabalho estiver desatualizada, o subversion pede para atualizar a cópia antes de submeter alterações 36
Conceitos URL do repositório Um repositório do Subversion é representado por uma URL Um browser pode ser usado para obter informações e visualizar os repositórios 37
Conceitos Revisão Uma operação commit publica as alterações feitas na cópia de trabalho como uma transação atômica Cada commit aceito atualiza a árvore de arquivos e gera um novo estado chamado revisão A revisão vale para o diretório e não somente para os arquivos alterados 38
Conceitos Funcionamento básico das revisões Subversion guarda duas informações na área administrativa Em qual revisão o arquivo local está baseado Data e hora da última atualização da cópia local a partir do repositório 39
Conceitos Com base nestas duas informações o Subversion pode identificar os estados: Não modificado e corrente Localmente alterado e corrente Não modificado e desatualizado Localmente modificado e desatualizado 40
Conceitos Atualizações e submissões são ações separadas Você enviar alterações não significa que está pronto para receber alterações 41
Controle de Versão Motivação Conceitos VisualSVN Tortoise 42
VisualSVN Manutenção dos repositórios Manutenção dos usuários Manutenção dos grupos 43
VisualSVN Nome para o repositório 44
VisualSVN Define um repositório vazio (sem estrutura) Define um repositório com estrutura simples TBT 45
VisualSVN Define o esquema de permissões 46
VisualSVN URL de acesso ao repositório 47
VisualSVN 48
VisualSVN Criar uma pasta para receber os arquivos do projeto em trunk 49
VisualSVN Criar dois usuários 50
VisualSVN branches: são usados para controlar alterações sem que o tronco seja comprometido tags: são usadas para rotular instantes chave na linha do tempo trunk: são usados para manter a linha de projeto principal 51
VisualSVN Ciclo básico de trabalho Obter/atualizar sua cópia de trabalho Realizar alterações Editar Adicionar Renomear Remover Verificar alterações Resolver conflitos Submeter suas alterações 52
VisualSVN Existem várias metodologias de uso do Subversion e suas estruturas, cada empresa deve analisar e adequar a ferramenta as suas necessidades 53
Controle de Versão Motivação Conceitos VisualSVN Tortoise 54
Tortoise TortoiseSVN é um cliente do Subversion SVN para Windows Código aberto GNU GPL Venceu o Community Choice Award de 2007 Melhor ferramenta para desenvolvedores 55
Tortoise Vantagens Integrado ao Windows Shell Independente do ambiente de desenvolvimento Pode ser integrado ao ambiente através de plug-in 56
Tortoise 57
Tortoise Vantagens Permite ver o estado de diretórios/arquivos baseado em ícones Possui GUI bastante amigável para visualizações e comparações Permite enviar comando ao Subversion através de menus 58
Tortoise 59
Tortoise Criando a pasta de projeto Nome da pasta: Projeto1 Licença.doc Logo.bmp Principal.cpp 60
Tortoise Importando um projeto Popular um repositório Devemos ter: Local com os arquivos a serem versionados URL do repositório Obs.: Importar não significa que automaticamente temos uma cópia de trabalho 61
Tortoise Obtendo uma cópia de trabalho URL do repositório Pasta para receber o conteúdo do repositório 62
Tortoise CASO 1: Editando os arquivos do projeto Usuário André adiciona o seu nome como autor do documento após a primeira linha TERMOS DE LICENÇA... Usuário André Insere o comentário Programa principal no início do código cpp Usuário Maria edita a imagem e adiciona o número 2 no arquivo 63
Tortoise Submetendo as alterações André submete primeiro suas alterações Maria submete depois as suas alterações 64
Tortoise CASO 2: Editando arquivos de projeto Maria insere no final do documento de licença uma linha para assinatura do gerente do projeto Submeter alterações Maria submete suas alterações 65
Tortoise commit falhou! Licença.rtf está desatualizado Atualizar a sua cópia 66
Tortoise Porque o Subversion não avisou Maria que havia uma alteração no documento? Dependendo do tamanho da alteração, isso pode alocar muito recurso Maria pode nunca mais trabalhar neste projeto ou arquivo Maria pode voltar a trabalhar neste projeto um mês depois quando existem outras alterções 67
Tortoise Boa prática de trabalho Sempre que for iniciar alguma alteração, faça uma atualização da sua cópia de trabalho local Não deixe acumular muito conteúdo, analise e faça submissões constantes de suas alterações para o repositório 68
Tortoise CASO 3: Atualizando a cópia de trabalho Agora André tem a versão mais atual dos arquivos 69
Tortoise CASO 4: Resolvendo conflitos André precisa somar dois números no programa principal e decidiu então alterar o código float x = 10, y = 5;... cout << x + y; André submete seu trabalho 70
Tortoise CASO 4: Resolvendo conflitos Maria analisou o mesmo problema e decidiu então alterar o código double num1 = 5, num2 = 10, soma = 0;... soma = num1 + num2; cout << soma; Maria submete seu trabalho 71
Tortoise Aviso de cópia desatualizada Aviso de conflito 72
Tortoise O Tortoise marca a pasta e o arquivo indicando conflitos que devem ser resolvidos 73
Tortoise 74
Tortoise Torotise Merge Arquivo deles Arquivo meu Arquivo final 75
Tortoise Clicar com o botão direito na janela dos arquivos deles e meu permite optar por usar o arquivo inteiro Clicar com o botão direito do mouse na janela do arquivo final obriga a selecionar linha a linha qual será considerada para o arquivo final 76
Tortoise Arquivo final possui as alterações escolhidas 77
Tortoise Os conflitos foram resolvidos e as alterações de Maria podem ser submetidas 78
Tortoise Neste momento seria interessante a equipe de desenvolvimento ser informada do conflito e das alterações para que todos possam atualizar a sua cópia de trabalho 79
Tortoise CASO 5: Inserção de novos recursos A equipe vai inserir recursos novos no projeto É necessário que o projeto tronco fique intacto Maria é responsável por comandara as alterações Junto com a equipe resolvem iniciar um ramo para a linha do tempo dessas alterações 80
Tortoise Origem Destino Mensagem Revisão base Opções extras 81
Tortoise Cria um ramo não nos posiciona no ramo, para isso a opção Alternar a cópia de trabalho... deveria ter sido marcada 82
Tortoise Trocar o caminho da cópia de trabalho para o ramo recém criado Minha cópia de trabalho Novo caminho desejado 83
Tortoise Usar o navegador de repositório para verificar se o caminho está correto Alterar o nome da pasta da cópia de trabalho para facilitar a identificação Fazer com a equipe toda obtenha uma nova cópia de trabalho para este ramo 84
Tortoise CASO 6: Adicionado arquivos Maria cria um novo arquivo chamado funcoes.cpp int soma(int n1, n2) double soma(double n1, n2) Maria adiciona o novo arquivo ao controle de versão Maria submete as alterações e toda a equipe atualiza suas cópias de trabalho 85
Tortoise CASO 7: Removendo arquivos do controle de versão Arquivos temporários, backup, objeto (após compilação de código fonte), etc, devem ser retirados do controle de versão 86
Tortoise CASO 8: Deletar/Renomear O processo de deletar e/ou renomear arquivos e pastas devem ser realizado exclusivamente através do Tortoise para evitar problemas na cópia de trabalho 87
Tortoise CASO 9: Reverter alterações André verificou que algo foi feito errado que desestabilizou sua cópia de trabalho e corrigir manualmente seria muito trabalhoso Vai reverter sua cópia de trabalho ou arquivo individual para uma revisão anterior 88
Tortoise Caso 10: Combinar revisões André verificou que o ramo criado foi testado, finalizado e agora será integrado ao tronco Somente tronco reintegra ramo, um ramo não pode se reintegrar ao tronco A reintegração é realizado na cópia de trabalho Depois o tronco deve ser submetido ao repositório 89
Tortoise Caso 11: O projeto pode ser liberado para produção e comercialização ao cliente Maria cria um rótulo para este estado Maria faz um backup do repositório svnadmin hotcopy <origem> <destino> Origem: Repositorio + Projeto Destino: <sua pasta backup> + NomeProjeto 90
Tortoise Relatórios e informações dos repositórios 91