Conceitos sobre controle de versão
- #GitHub
- #Git
- Version Control System (VCS – Sistema de Controle de Versão) é um programa que gerencia o histórico das diferentes versões e estados de um arquivo durante sua jornada.
- Git é um sistema de controle de versão do tipo distribuído.
Bem, num sistema de controle de versão centralizado, existe um único servidor central que faz a hospedagem do desenvolvimento. Então todas as páginas, tudo que está acontecendo naquele projeto fica neste servidor, e as pessoas que são os colaboradores, simulados (na figura) por computador A e computador B, os 2 programadores conseguem interagir com o servidor central, enviando arquivos para este servidor. Ou seja, eles fazem as suas modificações em determinados arquivos e enviam as suas modificações para o servidor central, onde o servidor tem um administrador que fará um trabalho de checagem, mescla e autorização, para que esses códigos sejam implementados no projeto. Nesse modelo, esses programadores do computador A e computador b não tem as cópias do projeto com eles, então a experiência mostrou que esse tipo de controle não é tão produtivo quanto um controle de versão distribuído, porque um exemplo simples é que se esse servidor ficar inoperante os programadores não vão conseguir fazer implementações nessa base, então quer dizer, eles ficariam ociosos enquanto aguardariam o servidor voltar as suas atividades.
O sistema de modelo distribuído é bem diferente, então observe na ilustração (figura), o programador que está no computador A, tem um arquivo que ele está desenvolvendo e modificando, ele também tem visão das últimas versões desse arquivo, porque ele tem o projeto todo na máquina dele. Da mesma maneira, quem está no computador B, ou seja, o outro programador, está trabalhando num arquivo, pode ser até o mesmo arquivo do programador do computador A, então o computador A e o computador B (na figura), representam máquinas de programadores e desenvolvedores diferentes, tanto o computador A quanto o computador B podem estar trabalhando em arquivos diferentes ou até no mesmo arquivo. Eles podem enviar os seus arquivos para o servidor, que não é central, é distribuído. E o servidor então recebe esses arquivos com as modificações e faz na sequência (caso o administrador execute) a mesclagem desse arquivo que chegou com aquele que já estava no servidor. Isso pode acontecer a qualquer momento, a mescla pode acontecer no servidor, a mescla pode acontecer no computador local, mas o que é muito interessante, é que todos têm uma visão completa do projeto, e para que você possa fazer um download, você traz uma versão do arquivo 3 e a versão 3 do arquivo deve ser atualizada na sua máquina, se você fez uma alteração no arquivo dessa versão 3 e você tentar subir essa alteração, ele identificará se já existe lá no servidor uma versão atual, que não é a mesma que a sua e de repente, por exemplo, o desenvolvedor do computador B enviou um arquivo, o mesmo arquivo que o seu, um pouco antes, um dia antes, horas antes de você. Então se você for fazer o envio do teu arquivo, ele não permitirá, ele pedirá para você atualizar teu projeto para depois poder enviar as suas modificações. Logo, no modelo de controle Distribuído, todos têm visão de tudo. Todos têm o projeto atualizado a todo momento.
Então aqui (figura acima), a gente tem uma visão de como funciona o histórico de versões. Temos arquivos A, B e C, o que acontece com o GIT, é que ele verifica os status de cada versão, então, por exemplo, no primeiro momento, após subirmos a versão original (sem alterações), então vem a primeira versão, perceba que o arquivo A ele não teve alteração, só B e C. Então, no primeiro status de uma versão global do projeto temos alterações apenas desses 2 arquivos B e C, já na versão 2, no status geral, temos modificações só do A e do B. O controle de versão vai trabalhando em status momentâneos, como se fosse uma fotografia de um determinado momento em que aconteceu algo. E aí ele vai guardando todos esses status, todas essas versões, não só de um específico arquivo, mais de tudo o que aconteceu quando subirmos um Arquivo X, e como estava o status dos outros arquivos.