Maison  >  Article  >  interface Web  >  Mini-git, Comprendre comment les fichiers sont stockés dans les objets Git

Mini-git, Comprendre comment les fichiers sont stockés dans les objets Git

WBOY
WBOYoriginal
2024-08-22 18:45:03263parcourir

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

Hier, j'ai décidé d'implémenter moi-même l'une des fonctionnalités principales de Git, en particulier la façon dont les fichiers sont stockés, ce que sont les objets Git et les processus de hachage et de compression. Il m'a fallu 4 heures pour développer, et dans cet article, je vais vous expliquer mon processus de réflexion et mon approche.

Que se passe-t-il lorsque vous validez un fichier ?

Lorsque vous validez un fichier dans Git, plusieurs étapes importantes se produisent sous le capot :

Compression de fichiers :

Le contenu du fichier est compressé à l'aide d'un algorithme zlib pour réduire sa taille. Ce contenu compressé est ce qui est stocké dans la base de données d'objets Git.

Calcul de hachage :

Un hachage SHA-1 unique est généré à partir du contenu du fichier compressé. Ce hachage sert d'identifiant du fichier dans la base de données d'objets Git.

Stockage de l'objet :

Le fichier objet est stocké dans le répertoire .mygit/objects, organisé par les deux premiers caractères du hachage. Cette structure facilite la gestion et la récupération efficace des objets.
Mise à jour des informations de validation :

Pour démontrer comment les fichiers sont stockés dans git.
J'ai implémenté la fonctionnalité de validation, en prenant en compte un fichier

  1. Pour chaque fichier, j'ai calculé le hachage
  2. Dans le dossier des objets, un nouveau dossier est créé avec un nom égal aux deux premiers caractères du hachage.
  3. Et un fichier est créé dans ce dossier avec le hachage restant comme nom. (ce fichier stocke le format compressé du fichier validé)
  4. Modifications détectées en comparant le hachage nouvellement calculé et le dernier hachage calculé du fichier

Détection des changements

J'ai implémenté cet algorithme basé sur ma propre approche, mais Git utilise des algorithmes plus efficaces pour ces opérations.

  1. Tableau de lignes extrait de oldContent et newContent
  2. Création d'une carte pour stocker la ligne comme clé et l'index comme valeur
  3. Création de deux nouveaux tableaux pour stocker les index des lignes communes dans oldContent et newContent 4.par exemple : OldCommonarray = [0, 3] alors les lignes supprimées seront [1,2]

Dépôt GitHub
Linkedin

Merci beaucoup pour votre temps.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn