Entendendo VCS centralizado e distribuído

Essa é outra daquelas perguntinhas marotas de entrevistas, bora entender isso direitinho para responder com segurança!

VCS?

VCS significa version control system, ou sistema de controle de versões.

O GIT é o mais famoso hoje, o qual faz parte do grupo dos distribuídos.

Mas qual a diferença entre sistemas centralizados e distribuídos?

VSC Centralizado

O sistema centralizado, como o nome diz tem um servidor ou serviço central e funciona na arquitetura cliente/servidor. Este servidor tem todas as versões do código.

Para trabalhar em um projeto você precisa instalar o cliente e fazer o download de todo o código e sempre vai depender do servidor para gravar suas modificações, se ele não estiver no ar você não consegue fazer seus commits, e isso te impede de trabalhar.

A dependência do serviço no ar para trabalhar por si só já é algo que pode incomodar, além disso, temos um problema maior ainda, uma vez que todo o código está no servidor, perdeu o servidor, perdeu o código e aí ninguém trabalha mesmo.

Em resumo, se o servidor estiver fora, ninguém faz nada.

Os VCS centralizados podem até ser mais simples de instalar, manter e usar, mas o risco de um ponto único de falha é muito grande para assumir hoje em dia.

Exemplos de sistemas centralizados:

  • SVN
  • CVS
  • Perforce

VCS Distribuído

No VCS distribuído todo mundo tem a cópia do software em sua máquina, pode trabalhar localmente e depois enviar e integrar seu código em um repositório intermediário usado para isso, no caso do GIT chamamos esse locais de remotes.

Como todo mundo tem o código, temos múltiplos backups e caso o repositório de alguém se corrompa, podemos facilmente pegar a cópia de outro desenvolvedor e seguir trabalhando.

Como temos uma cópia local, podemos trabalhar offline e depois enviar e integrar o código com dos nossos colegas, e saiba que trabalhar local é bem mais rápido.

A criação de branchs é rápida e objetiva pq é tudo local e não precisa contatar um servidor central toda a vez que for criar uma branch.

A única coisa que precisa ficar claro é a curva de aprendizado pode ser maior do que sistemas mais simples e centralizados, contudo, o poder, a flexibilidade, a segurança e a velocidade de trabalhar superam esse detalhe.

Exemplos de sistemas centralizados:

  • GIT
  • Mercurial
  • Bazaar

Amarrando as pontas

Hoje o GIT se tornou padrão do mercado, todo mundo usa, conhece e sabe trabalhar, contudo, não é incomum encontrar empresas usando Mercurial o segundo mais popular entre os distribuídos.

Espero que tenha te ajudado a entender a diferença :)

[s]
Guto

Este post é do tipo #MindNotes, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho.