Controle de Versão (Versionamento de Código)
Tags: github, git, svn, braziliandevs
Published: 2021-01-16 21:14:06



Este artigo tem como intuito apresentar um dos conceitos que muitos iniciantes na área de desenvolvimento de software se deparam quando começam a desenvolver softwares de forma colaborativa e paralela o versionamento de código também conhecido como controle de versão.
	Não precisamos dizer que o código fonte é um “bem precioso”  que precisa ser guardado e bem gerenciado para que catástrofes não venham a acontecer e jogar por água abaixo anos de trabalho e conhecimento adquirido ao longo de desenvolvimento de um sistema. Além disso o versionamento de código acaba ajudando os times a rastrear alterações feitas ao longo do desenvolvimento de um produto, facilitando assim na resolução de bugs sem prejudicar as demais versões estáveis que estão rodando em produção. 
	 Legal mas você deve estar se perguntando agora como funciona  esse controle de versão?
	Antes de mais nada você precisa entender que o sistema de controle de versão trabalham de duas formas:

• O centralizado modelo este utilizado pelo SVN(também conhecido como Subversion) ele trabalha com o modelo de arquitetura chamada cliente-servidor(conforme podemos ver na figura abaixo) ou seja você tem um servidor central responsável pela versão estável do sistema que está em produção(trunk) e diversas ramificações (branchs) onde os desenvolvedores utilizam para desenvolver novas features do sistema. 
Após essas features passarem por todo o processo de validação/testes é  necessário que a equipe de desenvolvimento realize o que chamamos de merge isto é juntar as alterações dos fontes feitas pelo desenvolvedor na branch que ele utilizou para desenvolver em conjunto com a última versão estável que está em produção.Como você já percebeu uma das desvantagens deste modelo de versionamento é a escalabilidade quando temos muitos desenvolvedores atuando no mesmo repositório, e também não há a possibilidade de trabalhar offline, já que é necessário sempre estar conectado ao servidor. A figura abaixo ilustra um pouco essa metodologia de trabalho


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/todhi4nsztsf4cnkk5p8.PNG)
	

 












•	Já o modelo distribuído muito utilizado pelo popular GIT trabalha de uma forma um pouco diferente, cada desenvolvedor tem seu próprio “servidor” portanto as operações de check-in e check-out são realizadas na própria máquina do desenvolvedor e diferentemente do modelo centralizado, neste modelo as maquinas do desenvolvedores comunicam-se entre si. Por ser um modelo muito complexo onde diversos desenvolvedores do mundo todo podem atuar num mesmo projeto, recomenda-se a utilização de um servidor remoto que tem como intuito hospedar o projeto afim de evitar perdas de código ao longo do desenvolvimento de um sistema, conforme podemos observar na figura abaixo:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3imantzy262evlmk6wn7.png)

Dentre os servidores remotos  mais famosos que trabalham de forma distribuída temos: o GitHub(o mais popular e muito utilizado pela galera de OpenSource acabou se tornando uma espécie de rede social dos desenvolvedores), e o BitBucket(utilizado em projetos onde você deseja ter uma privacidade maior).Como já falamos por se uma metodologia onde o “servidor está na máquina do próprio desenvolvedor” o sistema distribuído acaba sendo mais rápido em comparação ao centralizado porém exige do time em questão  um conhecimento mais apurado das ferramentas e comandos que rodam em linha de comando.

Bem depois dessa breve apresentação no próximo artigo iremos falar mais sobre o GIT, como funciona, principais comandos para criação e manipulação de repositórios.