sistemas de controle de versionamento - dainf · 2011-06-14 · ex : cvs, svn uma revisão precisa...

44
Repositórios 2 Sistemas de controle de versionamento Allan C. Trevisan PET-COCE

Upload: others

Post on 23-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Repositórios 2

Sistemas de controle de versionamento

Allan C. Trevisan

PET-COCE

Page 2: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Introdução

➔ Muitos problemas de desenvolvimento de software são causados por falta de controle de versão.

➔ Algumas questões que valem a pena serem respondidas :

Page 3: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Introdução

➢ 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?

Page 4: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Introdução

Esta apresentação pretende responder as seguintes perguntas :

1. Para que serve um sistema de controle de versão?

2. Como funciona o controle de versão?

3. Quais as semelhanças e diferenças entre o modelo centralizado e o distribuído?

4. Em que casos um tipo é melhor que outro?

Page 5: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Introdução

Quando se fala em sistemas de controle de versão, version control systems (VCS' s), alguns termos podem ser usados de maneira intercambiável :

revision control systems (RCS), software configura-tion management, source code management (SCM) or

source code control

Page 6: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Para que Serve o Controle de Versão?

O Controle de versão apoia o desenvolvimento de diversas maneiras:

● Histórico. Registra toda a evolução do projeto, cada alteração sobre cada arquivo. Com essas informações sabe-se quem fez o que, quando e onde. Além disso, permite reconstruir uma revisão específica do arquivo sempre que desejado;

● Colaboração. O controle de versão possibilita que vários desenvolvedores trabalhem em paralelo sobre os mesmo arquivos sem que um sobrescreva o código de outro, o que traria reaparecimento de defeitos e perda de funcionalidades;

● Variações no Projeto. Mantém linhas diferentes de evolução do mesmo projeto. Por exemplo, mantendo uma versão 1.0 enquanto a equipe prepara uma versão 2.0.

Page 7: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Para que Serve o Controle de Versão?

Enfim, controle de versão é fundamental para o desenvolvimento de software. Todos os

ambientes de desenvolvimento modernos, tais como o Eclipse e o NetBeans, já possuem plugins

para integração com algum sistema de controle de versão.

Page 8: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Como Funciona o Controle de Versão?

● O desenvolvedor não trabalha diretamente nos arquivos do repositório. Ao invés disso, usa uma área/cópia de trabalho que contém a cópia dos arquivos do projeto e que é monitorada para identificar as mudanças realizadas. Essa área é individual e isolada das demais áreas de trabalho.

● A sincronização entre a área de trabalho e o repositório é feita através dos comandos de commit e update.

● Tanto o controle de versão centralizado quanto o distribuído possuem repositórios e áreas de trabalho. A diferença está em como cada uma dessas partes está arranjada.

Page 9: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Como Funciona o Controle de Versão?

Page 10: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Centralizado

➔No controle de versão centralizado há um único repositório e várias cópias de trabalho que se

comunicam apenas através do repositório central.

➔A cópia de trabalho não inclui nenhuma história

Page 11: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Centralizado

Page 12: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Centralizado

Ex : CVS, SVN

Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão produzida recebe um número inteiro sequencial:

1, 2, 3... Como só existe um repositório, a numeração de revisão é a mesma para todos os

desenvolvedores.

Page 13: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Centralizado

● Uma revisão consiste de um arquivo e alguns metadados (log)

● As mudanças entre uma versão e outra são chamadas de diff ou delta

● A rede é um gargalo

● Trunk, branch

● tagging

Page 14: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Questões de concorrência

Abordagem pessimista : lock-modify-unlock

Abordagem otimista : copy-modify-merge

Page 15: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Centralizado

Page 16: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Centralizado

Page 17: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Centralizado

Page 18: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Centralizado

Page 19: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Centralizado

Page 20: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Centralizado

Page 21: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Distribuído

➔ No controle de versão distribuído cada desenvolvedor possui um repositório próprio

acoplado a uma área de trabalho.

➔ A comunicação entre eles continua sendo através de commit e update.

Page 22: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Distribuído

Page 23: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Distribuído

Um repositório pode se comunicar com qualquer outro através de duas operações básicas: pull e push:

Pull (Puxar). Atualiza o repositório local (destino) com todas as alterações feitas em outro repositório (origem).

Push (Empurrar). Envia as alterações do repositório local (origem) para um outro repositório (destino).

Não há necessidade de uma topologia pré-definida

Page 24: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Distribuído

Page 25: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Distribuído

A sincronização entre os desenvolvedores acontece de repositório a repositório e não existe, em princípio, um repositório mais importante que o outro, embora o papel de um repositório central

possa ser usado para convencionar o fluxo de trabalho.

Page 26: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Distribuído

➔ No sistema distribuído, os repositórios são autônomos e portanto não há como definir uma numeração sequencial compartilhada para todos. A solução é identificar cada revisão com uma numeração que nunca se repita em qualquer outro repositório.

➔ A forma mais usada é através de um hash SHA-1, que produz um número de 160 bits (40 dígitos na forma hexadecimal). Esse um número é tão grande e específico que torna extremamente improvável a colisão com um hash produzido por outro repositório.

Page 27: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Controle de Versão Distribuído

Page 28: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Distribuído

Page 29: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Distribuído

Page 30: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Distribuído

Page 31: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Distribuído

Page 32: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Distribuído

Page 33: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Sincronização no Controle de Versão Distribuído

Page 34: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Diferentes versões de projeto

Page 35: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Benefícios do Controle de Versão Distribuído

Do ponto de vista do desenvolvedor :

● Rapidez. As operações são processadas localmente. Não é necessário passar pela rede e contatar o servidor central para fazer um commit, log ou diff por exemplo.

● Autonomia. A conexão com a rede só é necessária para trocar revisões com outros repositórios. Fora isso, trabalha-se desconectado e em qualquer lugar, como num cliente por exemplo.

● Ramos privativos. Além de um repositório próprio, o trabalho local é feito em um ramo privativo que não interfere, nem sofre interferência dos demais, mesmo nas operações de sincronização entre repositórios. O momento de combinar um ramo com outro é uma decisão do desenvolvedor e não obrigatório antes de cada commit, como acontece no centralizado.

● Facilidade de Mesclagem. Só a facilidade de criação de ramos não seria suficiente se não fosse o rastreamento automático usado pelos DVCS, que torna o processo de mesclagem muito mais simples e indolor. Observação: No Subversion, o rastreamento automático de merges começou a partir da versão 1.5

Page 36: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Benefícios do Controle de Versão Distribuído

Do ponto de vista da gerência/coordenação :

● Confiabilidade. No sistema centralizado, uma pane no servidor interrompe todo o desenvolvimento. Já no sistema distribuído, além de a equipe poder continuar seu trabalho os repositórios dos desenvolvedores funcionam como cópias de backup de todo o projeto.

● Redução de custos com servidor. A carga de processamento fica distribuída nas próprias máquinas dos desenvolvedores. O repositório “central”, quando existe, tem o papel do repositório “oficial” e não como processador central das requisições.

Page 37: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Em que situações o DVCS não vai tão bem?

Maior complexidade

Page 38: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Em que situações o DVCS não vai tão bem?

Page 39: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Em que situações o DVCS não vai tão bem?

Ao contrário do centralizado, não adianta só commit e update para funcionar “no tranco”.

Todos os desenvolvedores da equipe precisam ter um conhecimento maior do modelo, da

ferramenta e, de preferência, também de um processo de desenvolvimento que padronize

fluxos de trabalho a serem seguidos. Só assim, o grafo acima deixa de ser apenas um emaranhado

e passa a representar muito claramente o fluxo do trabalho.

Page 40: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Em que situações o DVCS não vai tão bem?

➔Travamento de arquivos binários precisa ser centralizado :

➔O modelo puramente distribuído não é adequado para lidar com travamento justamente por não possuir um servidor central que possa

controlar as travas de todos.

Page 41: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Em que situações o DVCS não vai tão bem?

Page 42: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Em que situações o DVCS não vai tão bem?

Page 43: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Em que situações o DVCS não vai tão bem?

Controle de mudança ainda é centralizado :

As ferramentas de controle de mudança (e.g. Trac, Redmine, Mantis, Bugzilla) ainda não acompanharam as de controle de versão na

arquitetura peer-to-peer.

Page 44: Sistemas de controle de versionamento - DAINF · 2011-06-14 · Ex : CVS, SVN Uma revisão precisa de uma identificação única. No controle de versão centralizado, cada revisão

Referencias

[1] Version Control Systems, Stefan Otte, Computer Systems and Telematics, Institute of Computer Science, Freie Universitat, Berlin Germany

[2] Collaboration Tools for Global Software Engineering, Filippo Lanubile, Christof Ebert, Rafael Prikladnicki, and Aurora Vizcaíno

[3] Engenharia de Software para Software Livre, Cesar Augusto de Azambuja Brod, Joice Käfer

[4] http://www.ericsink.com/scm/scm_intro.html, acessado em 3/06/11 [5] http://pronus.eng.br/blog/http:/pronus.eng.br/blog/vantagens-e-desvantagens-do-controle-de-versao-distribuido, acessado em 5/06/11