Git
Chapters ▾ 2nd Edition

1.1 Começando - Sobre Controle de Versão

Este capítulo falará sobre como começar com o Git. Começaremos por explicar alguns antecedentes sobre as ferramentas de controle de versão, em seguida avançamos para como obter o Git em execução no teu sistema e finalmente como configurá-lo para começar a trabalhar. No final deste capítulo, tu deves ficar a perceber por que o Git está por perto, por que deves usá-lo e deves estar preparado para fazê-lo.

Sobre Controle de Versão

O que é “controle de versão”, e porque deverias-te importar? O controle de versão é um sistema que registra alterações num arquivo ou conjunto de arquivos ao longo do tempo para que te possas lembrar as versões específicas mais tarde. Para os exemplos neste livro tu irás usar o código-fonte de software como os arquivos que estão sendo versão controlada, embora na realidade podes fazer isto com quase qualquer tipo de arquivo num computador.

Se és um designer gráfico ou web designer e queres manter todas as versões de uma imagem ou layout (o que certamente deverias querer), um Sistema de Controle de Versão (VCS) é a coisa correta a ser usada. Ele permite que revertas os arquivos de volta para um estado anterior, reverte todo o projeto de volta para um estado anterior, compara as mudanças ao longo do tempo, vê quem por último modificou algo que pode estar a causar um problema, quem introduziu um problema, quando, e muito mais. Usar um VCS também significa que se tu estragares tudo ou perderes arquivos, podes facilmente recuperar. Além disso, tens tudo isto por muito pouca sobrecarga.

Sistemas Locais de Controle de Versão

O método de controle de versão de muitas pessoas é copiar os arquivos para outro diretório (talvez um diretório com carimbo de tempo, se eles forem espertos). Esta abordagem é muito comum, porque é tão simples, mas também é incrivelmente propenso a erros. É fácil esquecer em qual diretório te encontras e acidentalmente sobreescreveres o arquivo errado ou copiar arquivos que não queres.

Para lidar com este problema, programadores há muito tempo desenvolveram VCSs locais que tem uma base de dados simples que mantêm todas as alterações nos arquivos sob controle de revisão.

Local version control diagram
Figure 1. Controle de versão local.

Uma das ferramentas VCS mais populares foi um sistema chamado RCS, que ainda nos dias de hoje é distribuído com muitos computadores. Até mesmo o popular sistema operacional Mac OS X inclui o comando rcs quando instalas as Ferramentas de Desenvolvimento. RCS funciona mantendo conjuntos de alterações (ou seja, as diferenças entre os arquivos) num formato especial no disco; ele pode, em seguida, re-criar como qualquer arquivo se parecia em qualquer ponto no tempo, adicionando-se todas as alterações.

Sistemas Centralizados de Controle de Versão

A próxima questão importante que as pessoas encontram é que elas precisam colaborar com desenvolvedores em outros sistemas. Para lidar com este problema, foram desenvolvidos Sistemas Centralizados de Controle de Versão (CVCSs). Estes sistemas, tais como CVS, Subversion e Perforce, têm um único servidor que contém todos os arquivos de controle de versão, e um número de clientes que usam arquivos a partir desse lugar central. Por muitos anos, este tem sido o padrão para controle de versão.

Centralized version control diagram
Figure 2. Controle de versão centralidado.

Esta configuração oferece muitas vantagens, especialmente sobre VCSs locais. Por exemplo, todo a gente sabe, até um certo ponto o que toda a ente está a fazer no projeto. Os administradores têm controle refinado sobre quem pode fazer o que; e é muito mais fácil de administrar um CVCS do que lidar com bases de dados locais em cada cliente.

No entanto, esta configuração também tem algumas desvantagens graves. O mais óbvio é o ponto único de falha que o servidor centralizado representa. Se este servidor der problemas por uma hora, durante esta hora ninguém pode colaborar ou guardar as alterações da versão para o que quer que eles estejam a trabalhar. Se o disco rígido da base de dados central for corrompido, e backups apropriados não foram mantidos, tu perdes absolutamente tudo - toda a história do projeto, exceto imagens pontuais que os desenvolvedores possam ter nas suas máquinas locais. Sistemas VCS locais sofrem com este mesmo problema - sempre que tu tenhas toda a história do projeto num único lugar, há o risco de perder tudo.

Sistemas Distribuídos de Controle de Versão

É aqui que os Sistemas Distribuídos de Controle de Versão (DVCS) entram em cena. Num DVCS (como Git, Mercurial, Bazaar ou Darcs), os clientes não somente usam o estado mais recente dos arquivos: eles duplicam localmente repositório completo. Assim, se qualquer servidor morrer, e estes sistemas estiverem a colaborar por meio dele, qualquer um dos repositórios de clientes pode ser copiado de volta para o servidor para restaurá-lo. Cada clone é de fato um backup completo de todos os dados.

Distributed version control diagram
Figure 3. Controle de versão distribuído.

Além disso, muitos destes sistemas trabalham muito bem com os vários repositórios remotos, tal que possas colaborar em diferentes grupos de pessoas de maneiras diferentes ao mesmo tempo dentro do mesmo projeto. Isso permite que configures vários tipos de fluxos de trabalho que não são possíveis em sistemas centralizados, como modelos hierárquicos.