Olá Pessoal, tudo bom?
Há 3 anos atrás construí uma serie de artigos sobre versionamento de Projetos de Software, mas nunca mais mudei esses artigos ou acrescentei coisas novas. Para ver todos os artigos sobre versionamento acesse esta página. Lá haverá um mapa mental com todos os artigos. Nesse artigo vamos explicar o que é GIT, um dentre vários sistemas de versionamento para códigos fonte de um projeto de software. Veja na continuação.
GIT
GIT é um sistema de controle de versão de código fonte, criado em abril de 2005 por Linus Torvalds, o criador do Linux.
No seu início, o Git foi concebido para versionar o código do kernel do linux, com ênfase na performance e baixa utilização da rede de dados, pois as outras ferramentas na época não realizavam o que Linus Torvalds necessitava.
A maioria dos versionadores à época, não guardavam apenas as mudanças realizadas em um grupo de arquivos, mas sim, guardavam todos os arquivos.
Além disso Linus tinha três premissas durante o desenvolvimento do GIT:
- Utilize os conceitos e exemplos do CVS (Concurrent Versions System) como algo a NÃO ser feito; Se você estiver em dúvida sobre algo, faça exatamente o contrário que o CVS fez.
- Suporte a ser distribuído, podendo estar em vários servidores diferentes.
- Incluir várias ferramentas que auxiliem contra a corrupção de arquivos, sejam realizadas de forma acidental ou maliciosamente
O GIT realiza o armazenamento de arquivos de forma distinta. Ele utiliza um conceito de Snapshots, mas que pode ser comparado com “ponteiros das linguagens C e vertentes”. A cada commit de arquivos realizado o GIT faz a seguinte pergunta para cada arquivo armazenado no versionador: O arquivo que está sendo commitado foi modificado da versão que se encontra no versionador?
- Se foi, guarda uma nova versão do arquivo dentro do versionador e atualiza um Hash de estados daquele arquivo.
- Se não foi, não há necessidade de guardar uma nova versão do arquivo.
Um detalhe é que TODO commit possui um hash de ponteiros com o qual todos os arquivos possuem a indicação de qual estado está essa versão do commit. A figura abaixo mostra como funciona esse procedimento. Repare que na versão 1, ou seja, no primeiro commit do repositório, todos os arquivos são armazenados com sua versão zero. No segundo commit foram realizadas mudanças apenas nos arquivos A e C. Dessa forma uma nova versão destes arquivos é enviada para o GIT e o hash desse commit aponta para os novos arquivos A e C; Mas ainda o arquivo B aponta para a versão zero.
No terceiro commit apenas o arquivo C sofreu mudanças. Assim o hash desse commit aponta para o novo arquivo C, versão 2, para a versão 1 do arquivo A e para a versão 0 do arquivo B. No quarto commit, os arquivos A e B foram modificados. O hash desse commit aponta para a versão 2 do arquivo C, que não foi modificado, e agora aponta para as versões 2 e 1, respectivamente dos arquivos A e B. Esse processo continua indefinidamente enquanto houverem commits no repostiório.
Áreas de Operação
Além desse esquema de ponteiros para as últimas versões dos arquivos que existem no repositório GIT, outro mecanismo que melhorou a performance da ferramenta são as áreas de operação. O GIT possui uma forma descentralizada de trabalhar com o versionamento de código. Além de um repositório remoto, onde o GIT armazena todos os arquivos commitados junto com os hashes de todos os commits, ele possui um GIT local, que nada mais é que uma cópia do repositório remoto para aquele momento. Isso visa facilitar as comparações de versões de arquivos evitando o uso demasiado da rede. Para melhor explicar isso o GIT possui 3 áreas de operação distintas:
- Git directory
- Stage Area
- Working Directory
O Git directory é o seu repositório oficial do GIT, ou seja, é o seu repositório remoto. Aquele que armazena todos os commits e está sempre ditando qual é a ultima versão dos commits.
O Stage Area é um clone do Git directory mas local. Dessa forma todos os commits realizados até a hora da clonagem estarão copiados nessa área de operação. O GIT sempre irá atualizar esse repositório, através da operação de Pull, com as ultimas versões e novos commits realizados pelos desenvolvedores.
O Working Directory, é a sua área de modificação de arquivos, por exemplo, seu workspace da IDE Eclipse.
finnaly{
Existem diversos repositórios online que podem auxiliar no versionamento do código do seu projeto. Mas isso é assunto para outra hora!
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply