SlideShare uma empresa Scribd logo
1 de 15
Sistema de controle de versão
• Um sistema de controle de versão (ou versionamento), VCS (do inglês version control system) ou
ainda SCM (do inglês source code management) na função prática da Ciência da Computação e
da Engenharia de Software, é 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.
• Entre os mais comuns encontram-se as soluções livres: CVS, Mercurial, Git e SVN; e as
comerciais: SourceSafe, PVCS (Serena) e ClearCase. O desenvolvimento de software livre prefere o
SVN que vem substituindo o clássico CVS. Muitas empresas também adotam o SVN, embora
algumas empresas prefiram uma solução comercial, optando pelo ClearCase (da IBM) ou
SourceSafe (da Microsoft). Optar por uma solução comercial geralmente está relacionada à
garantia, pois as soluções livres não se responsabilizam por erros no software e perdas de
informações1 , apesar das soluções livres poderem ter melhor desempenho e segurança que as
comerciais. As soluções comerciais apesar de supostas garantias adicionais não garantem o sucesso
da implementação nem indenizam por qualquer tipo de erro mesmo que comprovadamente
advindo do software.
• A eficácia do controle de versão de software é comprovada por fazer parte das exigências para
melhorias do processo de desenvolvimento de certificações tais como CMMI e SPICE.2
Principais vantagens
• Controle do histórico: facilidade em desfazer e possibilidade de analisar o
histórico do desenvolvimento, como também facilidade no resgate de
versões mais antigas e estáveis. A maioria das implementações permitem
analisar as alterações com detalhes, desde a primeira versão até a última.
• Trabalho em equipe: um sistema de controle de versão permite que
diversas pessoas trabalhem sobre o mesmo conjunto de documentos ao
mesmo tempo e minimiza o desgaste provocado por problemas com
conflitos de edições. É possível que a implementação também tenha um
controle sofisticado de acesso para cada usuário ou grupo de usuários.
• Marcação e resgate de versões estáveis: a maioria dos sistemas permite
marcar onde é que o documento estava com uma versão estável, podendo
ser facilmente resgatado no futuro.
• Ramificação de projeto: a maioria das implementações possibilita a
divisão do projeto em várias linhas de desenvolvimento, que podem ser
trabalhadas paralelamente, sem que uma interfira na outra.
Cliente-Servidor vs Distribuído
• Sistemas cliente-servidor trabalha com um modelo centralizado no qual
existe uma copia do código corrente em um servidor central, no qual os
usuários fazem “check-out” a fim de trabalhar localmente. Quando o
usuário termina suas alterações, ele fazer um update (para validar se houve
alterações durante o tempo que ele estava editando), lida com os conflitos
que podem ter surgido e depois faz o “check-in” para que outros usuários
possam fazer “check-out” novamente.
• Sistemas distribuídos são estruturados com ponto-a-ponto: ao invés de
repositório centralizado, todos possuem seus próprios repositórios e
sincronizam através de troca de mudança conjuntos na forma de patches,
ou por merge de ramos de códigos (branches). No entanto na pratica a
maior parte dos projetos com tamanho significante possuem uma única
ramo nomeada como principal (trunk), mas isso é uma questão social e não
técnica.
Distribuídos
• Fornece full backup da base de código e seu histórico com
cada ramificação de código (branches), e existem muitos
ramos de código.
• É mais fácil trabalhar uma conexão de rede, pois você pode
fazer “commit” para sua copia local do repositório.
• Colaboração direta com outros desenvolvedores fica mais
fácil, logo não é preciso passar pelo sistema central.
• Fácil criação e destruição de ramos códigos (branches), e de
tal forma conduzir experiências quando desenvolvendo.
• Alguns veem como capacitando, encorajando novos
desenvolvedores a se envolverem no projeto.
• É possível múltiplos ramos principais (trunks) de diferentes
usos (estável, desenv ou ramos de releases, por exemplo).
• Commitar, visualizar histórico e outras operações similares
são rápidos, já que não precisam acessar o repositório
central.
• Merge em geral é muito mais fácil.
Cliente-Servidor
• É possível ter uma única pessoa ou
entidade manter o controle do histórico
a acessos ao projeto. (Em alguns casos
visto como positivo outros negativos)
• Uma única “versão máster” do código é
mantida centralizada em vez de ter
múltiplas versões concorrentes.
• Um servidor central pode ser
arquitetado e configurado para
“tolerância a falhas”, em vez de confiar
nas maquinas de muitas pessoas.
Boas Práticas / Trunk
• A pasta trunk é principal área de desenvolvimento.
• Todas as atualizações efetuadas dia-a-dia são
armazenadas na pasta trunk.
• Geralmente contém os arquivos mais atuais do
projeto, bem como as correções de bugs e os
últimos recursos adicionados ao projeto.
• Branchs e tags em SVN são leves – no servidor, ele
não faz uma cópia completa dos arquivos, apenas
um marcador dizendo “esses arquivos foram
copiados nesta revisão”, que ocupa apenas alguns
bytes. Com isto em mente, você nunca deve se
preocupar sobre espaço ocupado.
Boas Práticas / Branch
• A pasta branch contém uma cópia de determinada
revisão de trunk quando este estiver estável ou for
necessário criar uma nova funcionalidade que
posteriormente será mesclada devolta ao tronco
ou até mesmo para criar outra linha de
desenvolvimento intependente do tronco.
Boas Práticas / Tag
• Normalmente utilizada para lançamentos de “releases”, a tag
marca um ponto estável do desenvolvimento.
A seguir um exemplo de utilização
• Um projeto inicia e um repositório é criado. Ex.: meuprojeto 1.0.
• O projeto é desenvolvido na pasta trunk.
• Quando chega a hora de liberar uma versão, a pasta trunk é
copiada para a pasta branch e dado um nome de versão.
• Este branch é congelado e não sofre mais alterações, apenas
correções. Rigorosos testes são efetuados.
• Quando os testes efetuados encima de um branch estão
completos, a versão que se encontra no branch é copiada para a
pasta tags, formando assim um “release” ou uma versão
“liberada”. Ex.: meuprojeto 1.0.
• O projeto continua em desenvolvimento em trunk até que
chegue a hora de lançar uma nova versão. Ex.: meuprojeto 2.0.
• Havendo mais algum bug na tag “meuprojeto 1.0″, será corrigido
no branch correspondente e criada uma nova tag, evitando ter
que liberar a versão mais nova – possivelmente inacabada ou
não testada. Ex.: meuprojeto 1.1.
• Qualquer modificação em branch, deve ser copiada para a pasta
de tags, após todos os testes.
Mercado Subversion (SVN)
Visual SourceSafe(VSS)
CVS
Team Foundation Server (TFS)
Perforce
ClearCase
Git
PVCS
StarTeam
Vault
MKS Integrity
Mercurial
Synergy
AccuRev SCM
CA Software Change Manager
Rational Team Concert
Proficiência
Resumo
• Achar o equilíbrio entre algo comercial ou
comunitário, cliente-servidor ou distribuído, novo ou
maduro, integrado ou stand alone etc ... são algumas
das duvidas na escolha de uma solução para sua
empresa. Deixo aqui dados analíticos e quantitativos
para que você tome sua própria decisão. Lembrando
que não existe o estado da arte então busque o
equilíbrio.
Fontes :
• http://pt.wikipedia.org/wiki/Sistema_de_controle_d
e_vers%C3%A3o
• http://www.tuxradar.com/content/which-version-
control-system-best-you
• http://www.scalevp.com/github-the-new-locus-of-
software-development
• http://google.com.br
Escolha a Melhor Solução de Controle de Versão para seu Projeto

Mais conteúdo relacionado

Mais procurados

Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versãoocfelipe
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com HudsonLuis Reis
 
Integração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoIntegração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoMario Mendonça
 
Desconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em DelphiDesconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em DelphiFelipe Caputo
 
Git e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilGit e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilTiago Antônio da Silva
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaFabio Moura Pereira
 
GCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de VersõesGCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de VersõesMisael Santos
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openrukoÉverton Ribeiro
 
Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Marco Rosner
 
Integração Contínua com CVS, CruiseControl, AntHill, Gump
Integração Contínua com CVS, CruiseControl, AntHill, GumpIntegração Contínua com CVS, CruiseControl, AntHill, Gump
Integração Contínua com CVS, CruiseControl, AntHill, GumpDenis L Presciliano
 
Versionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo RosaVersionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo RosaTchelinux
 
1.1. treinamentos instalação fluig
1.1. treinamentos instalação fluig1.1. treinamentos instalação fluig
1.1. treinamentos instalação fluigpinheirorocha
 
Aula 01 engenharia de software
Aula 01   engenharia de softwareAula 01   engenharia de software
Aula 01 engenharia de softwareelisanesteilmann
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122Bruno Souza
 

Mais procurados (20)

Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com Hudson
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Integração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoIntegração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimento
 
Svn - grupo de estudos sol7
Svn - grupo de estudos sol7Svn - grupo de estudos sol7
Svn - grupo de estudos sol7
 
Desconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em DelphiDesconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em Delphi
 
Git e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilGit e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código Fácil
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e Concorrência
 
GCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de VersõesGCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de Versões
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openruko
 
Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?
 
Jenkins workshop
Jenkins workshopJenkins workshop
Jenkins workshop
 
Integração Contínua com CVS, CruiseControl, AntHill, Gump
Integração Contínua com CVS, CruiseControl, AntHill, GumpIntegração Contínua com CVS, CruiseControl, AntHill, Gump
Integração Contínua com CVS, CruiseControl, AntHill, Gump
 
Novidades do plone 4
Novidades do plone 4Novidades do plone 4
Novidades do plone 4
 
Cvs everton
Cvs   evertonCvs   everton
Cvs everton
 
Versionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo RosaVersionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
 
1.1. treinamentos instalação fluig
1.1. treinamentos instalação fluig1.1. treinamentos instalação fluig
1.1. treinamentos instalação fluig
 
Aula 01 engenharia de software
Aula 01   engenharia de softwareAula 01   engenharia de software
Aula 01 engenharia de software
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
 
Alm open source
Alm open sourceAlm open source
Alm open source
 

Destaque

Controle de versão - GIT
Controle de versão - GITControle de versão - GIT
Controle de versão - GITJefferson Lima
 
Git - Controle de Versão Inteligente
Git - Controle de Versão InteligenteGit - Controle de Versão Inteligente
Git - Controle de Versão InteligenteAdriano Rocha
 
A brief introduction to version control systems
A brief introduction to version control systemsA brief introduction to version control systems
A brief introduction to version control systemsTim Staley
 
Version Control & Git
Version Control & GitVersion Control & Git
Version Control & GitCraig Smith
 
What is version control software and why do you need it?
What is version control software and why do you need it?What is version control software and why do you need it?
What is version control software and why do you need it?Leonid Mamchenkov
 
Version Control with SVN
Version Control with SVNVersion Control with SVN
Version Control with SVNPHPBelgium
 
Git Version Control System
Git Version Control SystemGit Version Control System
Git Version Control SystemKMS Technology
 
Introduction to Version Control
Introduction to Version ControlIntroduction to Version Control
Introduction to Version ControlJeremy Coates
 
Introduction to Git/Github - A beginner's guide
Introduction to Git/Github - A beginner's guideIntroduction to Git/Github - A beginner's guide
Introduction to Git/Github - A beginner's guideRohit Arora
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners HubSpot
 
Quick Introduction to git
Quick Introduction to gitQuick Introduction to git
Quick Introduction to gitJoel Krebs
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheLeslie Samuel
 

Destaque (16)

Controle de versão - GIT
Controle de versão - GITControle de versão - GIT
Controle de versão - GIT
 
Git in 5 Minutes
Git in 5 MinutesGit in 5 Minutes
Git in 5 Minutes
 
Git - Controle de Versão Inteligente
Git - Controle de Versão InteligenteGit - Controle de Versão Inteligente
Git - Controle de Versão Inteligente
 
A brief introduction to version control systems
A brief introduction to version control systemsA brief introduction to version control systems
A brief introduction to version control systems
 
Version Control & Git
Version Control & GitVersion Control & Git
Version Control & Git
 
What is version control software and why do you need it?
What is version control software and why do you need it?What is version control software and why do you need it?
What is version control software and why do you need it?
 
Version Control with SVN
Version Control with SVNVersion Control with SVN
Version Control with SVN
 
Git Presentation
Git PresentationGit Presentation
Git Presentation
 
Git Version Control System
Git Version Control SystemGit Version Control System
Git Version Control System
 
Basic Git Intro
Basic Git IntroBasic Git Intro
Basic Git Intro
 
Introduction to Version Control
Introduction to Version ControlIntroduction to Version Control
Introduction to Version Control
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Introduction to Git/Github - A beginner's guide
Introduction to Git/Github - A beginner's guideIntroduction to Git/Github - A beginner's guide
Introduction to Git/Github - A beginner's guide
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners
 
Quick Introduction to git
Quick Introduction to gitQuick Introduction to git
Quick Introduction to git
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Semelhante a Escolha a Melhor Solução de Controle de Versão para seu Projeto

Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágilClaudia Melo
 
Trac e SVN - Introdução
Trac e SVN - IntroduçãoTrac e SVN - Introdução
Trac e SVN - IntroduçãoBruno Caimar
 
DevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftDevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftGraziella Bonizi
 
SVN - Subversion: Guia de sobrevivência do usuário
SVN - Subversion: Guia de sobrevivência  do usuárioSVN - Subversion: Guia de sobrevivência  do usuário
SVN - Subversion: Guia de sobrevivência do usuárioFabrício Campos
 
Aula 4 gerência de configuração de software1
Aula 4   gerência de configuração de software1Aula 4   gerência de configuração de software1
Aula 4 gerência de configuração de software1Tiago Vizoto
 
O que é framework
O que é frameworkO que é framework
O que é frameworkfcdigital
 
Ferramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareFerramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareDanilo Sousa
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitMozDevz
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiMayara Fernandes
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourcetdc-globalcode
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Globalcode
 
Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVNLuciano Lima
 
O_Ciclo_de_Vida_do_Desenvolvimento_de_Sistemas.pdf
O_Ciclo_de_Vida_do_Desenvolvimento_de_Sistemas.pdfO_Ciclo_de_Vida_do_Desenvolvimento_de_Sistemas.pdf
O_Ciclo_de_Vida_do_Desenvolvimento_de_Sistemas.pdfAthena542429
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoFrederico Madeira
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlabJackson F. de A. Mafra
 
CVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - AdministraçãoCVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - AdministraçãoMarden Neubert
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 

Semelhante a Escolha a Melhor Solução de Controle de Versão para seu Projeto (20)

Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágil
 
Trac e SVN - Introdução
Trac e SVN - IntroduçãoTrac e SVN - Introdução
Trac e SVN - Introdução
 
DevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftDevOps & Docker com a stack Microsoft
DevOps & Docker com a stack Microsoft
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Controle de versões com o Subversion
Controle de versões com o SubversionControle de versões com o Subversion
Controle de versões com o Subversion
 
SVN - Subversion: Guia de sobrevivência do usuário
SVN - Subversion: Guia de sobrevivência  do usuárioSVN - Subversion: Guia de sobrevivência  do usuário
SVN - Subversion: Guia de sobrevivência do usuário
 
Aula 4 gerência de configuração de software1
Aula 4   gerência de configuração de software1Aula 4   gerência de configuração de software1
Aula 4 gerência de configuração de software1
 
O que é framework
O que é frameworkO que é framework
O que é framework
 
Ferramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareFerramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de Software
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to Git
 
Git hub and Laravel
Git hub and Laravel Git hub and Laravel
Git hub and Laravel
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSource
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!
 
Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVN
 
O_Ciclo_de_Vida_do_Desenvolvimento_de_Sistemas.pdf
O_Ciclo_de_Vida_do_Desenvolvimento_de_Sistemas.pdfO_Ciclo_de_Vida_do_Desenvolvimento_de_Sistemas.pdf
O_Ciclo_de_Vida_do_Desenvolvimento_de_Sistemas.pdf
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de Código
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
 
CVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - AdministraçãoCVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - Administração
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 

Escolha a Melhor Solução de Controle de Versão para seu Projeto

  • 1.
  • 2. Sistema de controle de versão • Um sistema de controle de versão (ou versionamento), VCS (do inglês version control system) ou ainda SCM (do inglês source code management) na função prática da Ciência da Computação e da Engenharia de Software, é 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. • Entre os mais comuns encontram-se as soluções livres: CVS, Mercurial, Git e SVN; e as comerciais: SourceSafe, PVCS (Serena) e ClearCase. O desenvolvimento de software livre prefere o SVN que vem substituindo o clássico CVS. Muitas empresas também adotam o SVN, embora algumas empresas prefiram uma solução comercial, optando pelo ClearCase (da IBM) ou SourceSafe (da Microsoft). Optar por uma solução comercial geralmente está relacionada à garantia, pois as soluções livres não se responsabilizam por erros no software e perdas de informações1 , apesar das soluções livres poderem ter melhor desempenho e segurança que as comerciais. As soluções comerciais apesar de supostas garantias adicionais não garantem o sucesso da implementação nem indenizam por qualquer tipo de erro mesmo que comprovadamente advindo do software. • A eficácia do controle de versão de software é comprovada por fazer parte das exigências para melhorias do processo de desenvolvimento de certificações tais como CMMI e SPICE.2
  • 3. Principais vantagens • Controle do histórico: facilidade em desfazer e possibilidade de analisar o histórico do desenvolvimento, como também facilidade no resgate de versões mais antigas e estáveis. A maioria das implementações permitem analisar as alterações com detalhes, desde a primeira versão até a última. • Trabalho em equipe: um sistema de controle de versão permite que diversas pessoas trabalhem sobre o mesmo conjunto de documentos ao mesmo tempo e minimiza o desgaste provocado por problemas com conflitos de edições. É possível que a implementação também tenha um controle sofisticado de acesso para cada usuário ou grupo de usuários. • Marcação e resgate de versões estáveis: a maioria dos sistemas permite marcar onde é que o documento estava com uma versão estável, podendo ser facilmente resgatado no futuro. • Ramificação de projeto: a maioria das implementações possibilita a divisão do projeto em várias linhas de desenvolvimento, que podem ser trabalhadas paralelamente, sem que uma interfira na outra.
  • 4. Cliente-Servidor vs Distribuído • Sistemas cliente-servidor trabalha com um modelo centralizado no qual existe uma copia do código corrente em um servidor central, no qual os usuários fazem “check-out” a fim de trabalhar localmente. Quando o usuário termina suas alterações, ele fazer um update (para validar se houve alterações durante o tempo que ele estava editando), lida com os conflitos que podem ter surgido e depois faz o “check-in” para que outros usuários possam fazer “check-out” novamente. • Sistemas distribuídos são estruturados com ponto-a-ponto: ao invés de repositório centralizado, todos possuem seus próprios repositórios e sincronizam através de troca de mudança conjuntos na forma de patches, ou por merge de ramos de códigos (branches). No entanto na pratica a maior parte dos projetos com tamanho significante possuem uma única ramo nomeada como principal (trunk), mas isso é uma questão social e não técnica.
  • 5. Distribuídos • Fornece full backup da base de código e seu histórico com cada ramificação de código (branches), e existem muitos ramos de código. • É mais fácil trabalhar uma conexão de rede, pois você pode fazer “commit” para sua copia local do repositório. • Colaboração direta com outros desenvolvedores fica mais fácil, logo não é preciso passar pelo sistema central. • Fácil criação e destruição de ramos códigos (branches), e de tal forma conduzir experiências quando desenvolvendo. • Alguns veem como capacitando, encorajando novos desenvolvedores a se envolverem no projeto. • É possível múltiplos ramos principais (trunks) de diferentes usos (estável, desenv ou ramos de releases, por exemplo). • Commitar, visualizar histórico e outras operações similares são rápidos, já que não precisam acessar o repositório central. • Merge em geral é muito mais fácil.
  • 6. Cliente-Servidor • É possível ter uma única pessoa ou entidade manter o controle do histórico a acessos ao projeto. (Em alguns casos visto como positivo outros negativos) • Uma única “versão máster” do código é mantida centralizada em vez de ter múltiplas versões concorrentes. • Um servidor central pode ser arquitetado e configurado para “tolerância a falhas”, em vez de confiar nas maquinas de muitas pessoas.
  • 7. Boas Práticas / Trunk • A pasta trunk é principal área de desenvolvimento. • Todas as atualizações efetuadas dia-a-dia são armazenadas na pasta trunk. • Geralmente contém os arquivos mais atuais do projeto, bem como as correções de bugs e os últimos recursos adicionados ao projeto. • Branchs e tags em SVN são leves – no servidor, ele não faz uma cópia completa dos arquivos, apenas um marcador dizendo “esses arquivos foram copiados nesta revisão”, que ocupa apenas alguns bytes. Com isto em mente, você nunca deve se preocupar sobre espaço ocupado.
  • 8. Boas Práticas / Branch • A pasta branch contém uma cópia de determinada revisão de trunk quando este estiver estável ou for necessário criar uma nova funcionalidade que posteriormente será mesclada devolta ao tronco ou até mesmo para criar outra linha de desenvolvimento intependente do tronco.
  • 9. Boas Práticas / Tag • Normalmente utilizada para lançamentos de “releases”, a tag marca um ponto estável do desenvolvimento. A seguir um exemplo de utilização • Um projeto inicia e um repositório é criado. Ex.: meuprojeto 1.0. • O projeto é desenvolvido na pasta trunk. • Quando chega a hora de liberar uma versão, a pasta trunk é copiada para a pasta branch e dado um nome de versão. • Este branch é congelado e não sofre mais alterações, apenas correções. Rigorosos testes são efetuados. • Quando os testes efetuados encima de um branch estão completos, a versão que se encontra no branch é copiada para a pasta tags, formando assim um “release” ou uma versão “liberada”. Ex.: meuprojeto 1.0. • O projeto continua em desenvolvimento em trunk até que chegue a hora de lançar uma nova versão. Ex.: meuprojeto 2.0. • Havendo mais algum bug na tag “meuprojeto 1.0″, será corrigido no branch correspondente e criada uma nova tag, evitando ter que liberar a versão mais nova – possivelmente inacabada ou não testada. Ex.: meuprojeto 1.1. • Qualquer modificação em branch, deve ser copiada para a pasta de tags, após todos os testes.
  • 10. Mercado Subversion (SVN) Visual SourceSafe(VSS) CVS Team Foundation Server (TFS) Perforce ClearCase Git PVCS StarTeam Vault MKS Integrity Mercurial Synergy AccuRev SCM CA Software Change Manager Rational Team Concert
  • 12.
  • 13. Resumo • Achar o equilíbrio entre algo comercial ou comunitário, cliente-servidor ou distribuído, novo ou maduro, integrado ou stand alone etc ... são algumas das duvidas na escolha de uma solução para sua empresa. Deixo aqui dados analíticos e quantitativos para que você tome sua própria decisão. Lembrando que não existe o estado da arte então busque o equilíbrio.
  • 14. Fontes : • http://pt.wikipedia.org/wiki/Sistema_de_controle_d e_vers%C3%A3o • http://www.tuxradar.com/content/which-version- control-system-best-you • http://www.scalevp.com/github-the-new-locus-of- software-development • http://google.com.br