"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Mini-git, entendendo como os arquivos são armazenados em objetos Git

Mini-git, entendendo como os arquivos são armazenados em objetos Git

Publicado em 2024-08-24
Navegar:797

Mini-git, Understanding How Files Are Stored in Git Objects

Ontem, decidi implementar uma das principais funcionalidades do Git por conta própria - especificamente, como os arquivos são armazenados, o que são objetos Git e os processos de hash e compactação. Levei 4 horas para desenvolver e, neste artigo, explicarei meu processo de pensamento e abordagem.

O que acontece quando você envia um arquivo?

Quando você envia um arquivo no Git, várias etapas importantes ocorrem nos bastidores:

Compactação de arquivo:

O conteúdo do arquivo é compactado usando um algoritmo zlib para reduzir seu tamanho. Esse conteúdo compactado é o que é armazenado no banco de dados de objetos Git.

Cálculo de hash:

Um hash SHA-1 exclusivo é gerado a partir do conteúdo do arquivo compactado. Este hash serve como identificador do arquivo no banco de dados de objetos Git.

Armazenando o objeto:

O arquivo objeto é armazenado no diretório .mygit/objects, organizado pelos dois primeiros caracteres do hash. Essa estrutura facilita o gerenciamento e a recuperação eficiente de objetos.
Atualizando informações de confirmação:

Para demonstrar como os arquivos são armazenados no git.
Eu implementei a funcionalidade de commit, levando um arquivo em consideração

  1. Para cada arquivo, calculei o hash
  2. Dentro da pasta de objetos, uma nova pasta é criada com nome igual aos dois primeiros caracteres do hash.
  3. E um arquivo é criado dentro dessa pasta com o hash restante como nome. (este arquivo armazena o formato compactado do arquivo confirmado)
  4. Alterações detectadas comparando o hash recém-calculado e o último hash calculado do arquivo

Detectando alterações

Implementei esse algoritmo com base em minha própria abordagem, mas o Git usa algoritmos mais eficientes para essas operações.

  1. Matriz extraída de linhas de oldContent e newContent
  2. Criado um mapa para armazenar linha como chave e índice como valor
  3. Criados dois novos arrays para armazenar índices de linhas comuns em oldContent e newContent 4.por exemplo: OldCommonarray = [0 , 3] então as linhas excluídas serão [1,2]

Repositório GitHub
Linkedin

Muito obrigado pelo seu tempo.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/keerthivardhan1/mini-git-understanding-how-files-are-stored-in-git-objects-5bfb?1 Se houver alguma violação, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3