Controle de versão com Git

Controle de versão

Este é meu primeiro post de uma série que escreverei sobre Git. Sendo mais específico, nesta série procurarei apresentar alguns conceitos básicos sobre Git: o que é, o que o diferencia dos outros sistemas de versionamento, por que tantas pessoas estão usando, como fazer download, instalação e configuração.

Minha fonte de informações é o site de Scott Chacon (http://git-scm.com), que disponibiliza conteúdo de excelente qualidade sobre Git (em inglês).

Sobre Sistema de Controle de Versão

O que é um Sistema de Controle de Versão, qual a vantagem em utilizar? Um Sistema de Controle de Versão (VCS, do inglês Version Control System) é um sistema que registra alterações de um arquivo ou conjunto de arquivos ao longo do tempo, permitindo a recuperação de versões específicas do arquivo quando necessário.

Sistemas de versionamento são muito utilizados no desenvolvimento de softwares, todavia não se restringem somente a esse tipo de tarefa, pois com um bom VCS é possível fazer o controle de versão de qualquer tipo de arquivo armazenado em seu computador.

Se você é um programador, designer gráfico ou um estudante, e quer manter cada versão do seu código fonte, imagem ou monografia/artigo/tese, utilizar um VCS é uma escolha sábia. Ele permite reverter arquivos de volta ao estado anterior, acompanhar toda as alterações do arquivo, comparar versões, ver quem realizou as modificações que podem estar causando problemas no seu projeto, e muito mais. Com um VCS você terá menos dor de cabeça nos casos em que um arquivo importante é apagado ou corrompido, pois será muito fácil recuperá-lo.

Sistemas de Controle de Versão Local

Diversas pessoas escolhem controlar a versão de seus arquivos simplesmente copiando-os para uma pasta, em geral nomeada com a data e hora ou número da revisão. Este método é muito comum porque é simples, todavia propenso a erros. É muito fácil confundir o diretório ou pasta de trabalho e acidentalmente editar o arquivo errado ou sobrescrever algum arquivo por engano.

Para lidar com essas questões, foram desenvolvidos os Sistemas de Controle de Versão Local que tinham uma base de dados simples que armazenava as alterações dos arquivos sob controle de versão, A Figura 1 apresenta o diagrama de um VCS local.

Diagrama de controle de versão local

Figura 1 – Diagrama de controle de versão local
Fonte: http://git-scm.com/book

Sistemas de Controle de Versão Centralizado

Os Sistemas de Controle de Versão Centralizado surgiram para resolver a questão do controle de versão de projetos com vários colaboradores. Esses sistemas, como por exemplo o CVS e Subversion, possuem um único servidor central contendo todo os arquivos versionados, e alguns clientes cadastrados que podem modificar os arquivos. Por muitos anos, esse foi o padrão para controle de versão, veja Figura 2.

Esse tipo de sistema oferece muitas vantagens em relação aos Sistemas de Controle de Versão Local, como por exemplo: a equipe consegue acompanhar o que cada integrante está fazendo e os administradores do repositório conseguem controlar o que cada usuário pode fazer.

Entretanto, sistemas centralizados possuem algumas desvantagens sérias. A mais óbvia é que o servidor pode “cair” a qualquer momento e permanecer inoperante por um longo tempo, impossibilitando os usuários de salvarem seus arquivos modificados durante esse período. Se o disco rígido do servidor vier a corromper e não houver backups, você perde absolutamente todo o seu repositório. Sistemas de Controle de Versão Local sofrem desse mesmo problema: sempre que você tiver um repositório inteiro armazenado em um único local, você corre o risco de perder tudo.

Diagrama de controle de versão centralizado

Figura 2 – Diagrama de controle de versão centralizado
Fonte: http://git-scm.com/book

Sistemas de Controle de Versão Distribuído

Sistemas de Controle de Versão Distribuído tais como Git, Mercurial, Bazaar ou Darcs apresentam como grande diferencial a ausência da figura central do servidor. Nesse tipo de sistema, cada usuário possui uma cópia do repositório com todas as suas revisões. Caso os servidores principais apresentem falha ou todo o repositório no servidor seja perdido, qualquer usuário poderá restaurá-lo, pois todos os usuários possuem uma cópia completa do repositório com todo o histórico de revisões. O versionamento em um Sistemas de Controle de Versão Distribuído é feito na sua própria máquina, sendo possível futuramente sincronizar com um servidor, veja a Figura 3.

Diagrama de controle de versão distribuído

Figura 3 – Diagrama de controle de versão distribuído
Fonte: http://git-scm.com/book

Uma breve história sobre o Git

GitO Git foi inicialmente projetado e desenvolvido por Linus Torvalds diante da necessidade de um sistema eficiente para controle de versão do kernel do linux. Entre 1991 a 2002 o projeto era mantido por meio de patch e arquivos compactados. A partir de 2002 o projeto passou a utilizar um sistema de controle de versão distribuído chamado BitKeeper.

Em 2005, o acordo entre os desenvolvedores do kernel do linux e a empresa desenvolvedora do BitKeeper foi quebrado e o sistema deixou de ser utilizado pela comunidade.  Este evento motivou a comunidade (em especial Linus Torvalds, pai do linux) a desenvolver o seu próprio sistema de controle de versão baseado em lições aprendidas com a ferramenta anterior. Este novo projeto tinha como requisitos:

  • Velocidades;
  • Simplicidade;
  • Suporte robusto ao desenvolvimento paralelo (projetos com milhares de branchs);
  • Ser totalmente distribuído;
  • Ter capacidade para tratar projetos de largas dimensões, como por exemplo o desenvolvimento do kernel do linux, dentro outros.

Desde o seu nascimento em 2005, o Git tem-se popularizado muito nos últimos anos, principalmente em projetos de software livre. Hoje, pode-se dizer que Git é o melhor Sistemas de Controle de Versão Distribuído que existe.

Fico por aqui pessoal. Em breve postarei mais informações sobre Git.

Deixe um Comentário

4 Comentários.

  1. Parabéns, você fez um git clone do MANUAL.

  2. Parabéns pelo tutorial, estou dando os primeiros passos com git para vercionar meus códigos fontes.

Deixe um Comentário