"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Mini-git, comprensión de cómo se almacenan los archivos en objetos Git

Mini-git, comprensión de cómo se almacenan los archivos en objetos Git

Publicado el 2024-08-24
Navegar:695

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

Ayer me propuse implementar una de las funcionalidades principales de Git por mi cuenta, específicamente, cómo se almacenan los archivos, qué son los objetos de Git y los procesos de hash y compresión. Me llevó 4 horas desarrollarlo y, en este artículo, te explicaré mi proceso de pensamiento y mi enfoque.

¿Qué sucede cuando confirmas un archivo?

Cuando confirmas un archivo en Git, se producen varios pasos importantes:

Compresión de archivos:

El contenido del archivo se comprime utilizando un algoritmo zlib para reducir su tamaño. Este contenido comprimido es lo que se almacena en la base de datos de objetos de Git.

Cálculo de hash:

Se genera un hash SHA-1 único a partir del contenido del archivo comprimido. Este hash sirve como identificador del archivo en la base de datos de objetos de Git.

Almacenamiento del objeto:

El archivo objeto se almacena en el directorio .mygit/objects, organizado por los dos primeros caracteres del hash. Esta estructura facilita la gestión y recuperación de objetos de manera eficiente.
Actualización de información de confirmación:

Para demostrar cómo se almacenan los archivos en git.
He implementado la funcionalidad de confirmación, teniendo en cuenta un archivo

  1. Para cada archivo, he calculado el hash
  2. Dentro de la carpeta de objetos, se crea una nueva carpeta con un nombre igual a los dos primeros caracteres del hash.
  3. Y se crea un archivo dentro de esa carpeta con el hash restante como nombre (este archivo almacena el formato comprimido del archivo confirmado)
  4. Cambios detectados al comparar el hash recién calculado y el último hash calculado del archivo

Detectar cambios

Implementé este algoritmo basándome en mi propio enfoque, pero Git usa algoritmos más eficientes para estas operaciones.

  1. Conjunto extraído de líneas de contenido antiguo y contenido nuevo
  2. Creó un mapa para almacenar la línea como clave e indexar como valor
  3. Se crearon dos matrices nuevas para almacenar índices de líneas comunes en contenido antiguo y contenido nuevo. 4.por ejemplo: OldCommonarray = [0, 3] luego las líneas eliminadas serán [1,2]

Repositorio de GitHub
Linkedin

Muchas gracias por tu tiempo.

Declaración de liberación Este artículo se reproduce en: https://dev.to/keerthivardhan1/mini-git-understanding-how-files-are-stored-in-git-objects-5bfb?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3