GIT Internals: Objetos do GIT

Ao explorarmos os detalhes dos objetos fundamentais do Git - Blobs, Trees e Commits - revelamos a infraestrutura robusta que sustenta o controle de versão distribuído. Esses componentes, apesar de operarem em segundo plano, desempenham papéis importantes na preservação do histórico de desenvolvimento de um projeto.

O Git se destaca como uma ferramenta essencial para controle de versão, permitindo que equipes colaborem eficientemente em projetos. No entanto, por trás da simplicidade das operações cotidianas, o Git opera com estruturas específicas e fundamentais: Blobs, Trees e Commits. O artigo GIT Internals: Objetos do GIT tem por objetivo explorar esses conceitos e dar para você um domínio maior do potencial do git.

Temos aqui no blog diversos artigos sobre temas como kubernetes, domain driven design, gestão, entre outros. GIT é um dos temas e escrevemos o artigo O essencial de GIT, que pode ser interessante para quem está interessado em iniciar os conhecimentos no assunto.

Os objetos do GIT

O GIT, no seu interior, trabalha com 3 diferentes tipos de objetos, apenas: os blobs, trees e commits. Eles têm o objetivo de armazenar os arquivos criados e manipulados pelo versionador. De maneira geral isso não é visível para o desenvolvedor comum, mas é possível ver melhor abrindo a pasta .git, oculta dentro de repositório do código local.

Objeto Blob

Blob ou Binary Large Files (Arquivos Binários Grandes) é um objeto que representa um documento em si, unico. O seu dado é guardado em binário e um hash SHA-1 é gerado para garantir sua integridade e identidade.

Manipulação de Blob no GIT

Objeto Tree

O Objeto Tree no atua como uma representação organizada dos Blobs, de maneira análoga aos diretórios em um sistema operacional. Uma tree pode ter um ou mais blobs associados a ele, ou pode ter um ou mais trees associadas. Ele também tem uma identidade definida pelo seu hash em SHA-1.

Manipulação de Tree no GIT

Então note a tree acima que tem o apontamento para o blob 532a criado mais acima. E no exemplo abaixo você pode ter outra tree que aponta para a tree 94ee e um outro blob, o eff3 com o arquivo estilo.css

Manipulação de Tree no GIT

Objeto Commit

O Commit no GIT é um instantâneo ou fotografia que captura o estado específico de uma Tree em um momento determinado. Também representado por um SHA-1 com um conjunto particular de metadados: como o autor do commit, a data/hora e a mensagem que justifica o commit.

Manipulação de Commit no GIT

Note que o commit também tem um apontamento para o commit anterior, ou seja, ele faz uma correlação com toda a história de snapshots criados

Manipulação de Commit no GIT

Panorama

Tenha, em resumo, uma visão panorâmica, considerando os dois blobs (teste.txt e estilo.css). Veja que há uma pasta raiz e uma pasta chamada textos. Na raiz tem-se o arquivo estilo.css e no sub-diretório tem o arquivo teste.txt. E veja que há 2 commits, o inicial e o que gera o arquivo css.

Exemplo de manipulação dos objetos Blob, Tree e Commit no GIT.

Conclusão de GIT Internals: Objetos do GIT

Em suma, ao explorarmos os detalhes dos objetos fundamentais do Git – Blobs, Trees e Commits – revelamos a infraestrutura robusta que sustenta o controle de versão distribuído. Esses componentes, apesar de operarem em segundo plano, desempenham papéis importantes na preservação do histórico de desenvolvimento de um projeto.


Thiago Anselme
Thiago Anselme - Gerente de TI - Arquiteto de Soluções

Ele atua/atuou como Dev Full Stack C# .NET / Angular / Kubernetes e afins. Ele possui certificações Microsoft MCTS (6x), MCPD em Web, ITIL v3 e CKAD (Kubernetes) . Thiago é apaixonado por tecnologia, entusiasta de TI desde a infância bem como amante de aprendizado contínuo.