SISTEMAS DE CONTROLE DE VERSÃO -Local, Centralizado e Distribuído

Como visto no post de introdução, um dos principais objetivos do Controle de Versão é gerenciar as modificações realizadas em seus arquivos, neste post será abordado os três tipos de controle de versão que são eles: local, centralizado e distribuído.


1- Sistema de Controle de Versão Local
Este é o método mais simples entre os três citados, seu funcionamento é basicamente copiar os arquivos para outro diretório, podendo colocar um arquivo de texto contendo a data, hora e quem modificou. Solução muito simples, porém muito suscetível a erros e problemas, segue abaixo alguns deles:

  • Caso o computador ou HD queime, todo o trabalho será perdido;
  • Não dá suporte à trabalhos em equipe (simultaneamente);
  • Esquecer em qual diretório está sendo feito as gravações e acabar sobrescrevendo um aquivo errado sem querer.
Há muito tempo atrás programadores desenvolveram VCSs locais que armazenavam todas as alterações dos arquivos sob controle de revisão. Um dos Sistema de Controle de Versão local mais famoso foi o RCS (Revision Control System ou Sistema de Controle de Revisão) lançado em 1982 por Walter F.Tichy. Este é um sistema ainda muito utilizado, acompanhado nas versões do MAC OS X.


(Fonte: https://git-scm.com/figures/18333fig0101-tn.png)


2 -Sistema de Controle de Versão Centralizado
Diante a necessidade de trabalhar em conjunto, a qual o Controle de Versão local não atende, foram desenvolvidos Sistemas de Controle de Versão Centralizados (Centralized Version Control System ou CVCS). Este funciona com a arquitetura de Cliente-Servidor onde temos: uma máquina (servidor) central que contém todos os arquivos versionados; maquina (clientes) que pode gravar ou resgatar (checkout) todo histórico das versões. Este sistema se teve estável e se tornou padrão por muitos anos no mercado para controle de versão, tendo como algumas das principais ferramentas CVS (Concurrent Version System), SVN Subversion, Perforce.

Entretanto este modelo também possui suas desavantagens, a mais grave é que existe apenas um servidor central, então caso ele pare de funcionar, ninguém conseguirá fazer download do projeto, ou salvar novas versões.



(Fonte: https://git-scm.com/figures/18333fig0102-tn.png)


3 -Sistema de Controle de Versão Distribuído
Os Sistemas de Controle de Versão Distribuídos (Distributed Version Control System ou DVCS) vem com objetivo dos clientes não apenas fazerem cópias das últimas versões dos arquivos, eles são cópias completas do repositório. Assim, se um servidor falha, qualquer um dos repositórios dos clientes pode ser copiado de volta para o servidor para restaurá-lo. Cada checkout (resgate) é na prática um backup completo de todos os dados. Suas principais ferramentas são: Git, Mercurial, Bazaar.


(Fonte: https://git-scm.com/figures/18333fig0103-tn.png)



4- Operações Básicas dos Controles de Versão Centralizado e Distribuído

Centralizado
Distribuído
Descrição
checkout
clone
criação da cópia de trabalho/repositório
commit
commit
envia alterações para o repositório, criando uma revisão
update
update
atualiza a cópia/área de trabalho em uma revisão

pull
importa revisões feita em outro repositório

push
envia revisões locais para outro repositório
(Fonte: DIAS; 2011)


Referências:

DIAS, André Felipe. Conceitos Básicos de Controle de Versão de Software — Centralizado e Distribuído. 2011. Disponível em: <https://blog.pronus.io/posts/conceitos-basicos-de-controle-de-versao-de-software-centralizado-e-distribuido/>. Acessado em 28 de Nov de 2018.

Disponível em: <https://git-scm.com/book/pt-br/v1/Primeiros-passos-Sobre-Controle-de-Vers%C3%A3o>. Acessado em 28 de Nov de 2018.

Disponível em: <https://gaea.com.br/controle-de-versao-de-software-tire-aqui-suas-duvidas/>. Acessado em 28 de Nov de 2018.

Disponível em: <https://digaotutoriais.wordpress.com/2016/04/12/controle-de-versao-localcentralizado-ou-distribuido/>. Acessado em 28 de Nov de 2018.

Comentários

  1. Bem legal o texto. Eu já tinha ouvido falar nesses tipos de controle de versão, mas não sabia muitos detalhes sobre eles. Uma outra desvantagem do sistema de controle de versão centralizado que eu acrescentaria é o trabalho com grandes equipes, pois não é recomendado. Para projetos desse tipo o ideal é que se use o controle de versão distribuído, que é o mais usado e o mais eficiente hoje em dia. Porémmm... cada caso é um caso. Tudo depende de qual objetivo quer ser alcançado, né? Não adianta usar um SCV super eficiente se não usa todos os seus recursos.

    ResponderExcluir
  2. Muito bem colocado, sim vale ressaltar que as características do projeto definem o tipo de Controle de versão ideal. Mas acredito que, nesse sentido, os SCV Distribuídos saem na vantagem e são os mais utilizados, por cobrir a necessidade mais comum à maioria dos projetos, que é a seguraça de ter cópias distribuídas dos arquivos em diferentes servidores.

    ResponderExcluir
  3. Parabéns pelo texto! Muito interessante essa questão que você cita da confiabilidade do Sistema de Controle de Versão Distribuído (DVCS), em que mesmo quando um servidor falha, os repositórios dos desenvolvedores funcionam como cópias de backup de todo o projeto. Uma outra vantagem interessante que eu andei vendo sobre os DVCS é a autonomia, pois 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. Porém, esse sistema traz a desvantagem de ter uma maior complexidade, porque nele há diversas combinações de arquiteturas de repositórios e fluxos de trabalho possíveis e, assim, todos os desenvolvedores da equipe precisam ter um conhecimento maior do modelo e da ferramenta.

    ResponderExcluir
  4. Ótimo texto, bem explicado! O SCV distribuídos são realmente bons para grandes projetos, mas para aplicações menores e por não ser centralizado o Git é uma boa opção também.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas