Maison  >  Article  >  outils de développement  >  Le flux de traitement sous-jacent de git

Le flux de traitement sous-jacent de git

王林
王林original
2023-05-20 09:11:07539parcourir

La popularité des plateformes d'hébergement de code telles que GitHub et GitLab a fait de Git un outil de contrôle de version qui a attiré beaucoup d'attention, et de plus en plus de personnes ont compris comment fonctionne Git. Cependant, comprendre l'apparence de Git consiste uniquement à utiliser Git. Pour vraiment comprendre Git, vous devez également comprendre le flux de traitement sous-jacent de Git.

Aperçu de la structure sous-jacente de Git

Git est un système de contrôle de version distribué, auquel correspond un système de contrôle de version centralisé (tel que SVN), car Git est distribué Fonctionnalités, chaque référentiel Git est un référentiel complet.

Le répertoire de travail de Git contient deux parties : l'objet d'entrepôt Git et l'arborescence de travail. Le statut de l'objet d'entrepôt Git et de l'arborescence de travail peut être analogue à la relation entre les alias, les liens physiques et les liens symboliques respectivement.

La méthode de stockage de fichiers sous-jacente de Git

La technologie de stockage de fichiers sous-jacente de Git est principalement divisée en deux aspects :

  1. Stockage d'objets#🎜 🎜 #
  2. Utilisation du format de fichier compressible
Stockage d'objets

Git enregistre toutes les modifications de code en tant qu'objets, parmi lesquels la clé Les objets sont blob, tree et s'engager. Parmi eux, blob est un instantané du contenu du code, tree est un instantané d'un ensemble de fichiers et de répertoires et commit est un instantané des modifications du code.

Les lecteurs attentifs constateront que ces objets sont quelque peu similaires au mécanisme d'inode dans les systèmes Linux. Un nœud de fichier inode peut représenter un fichier ou un répertoire, et un nœud de fichier inode contient des informations telles que le numéro de bloc de disque. . Dans Git, blob est l'objet instantané du contenu du fichier dans le nœud de fichier inode, tree est l'objet instantané du répertoire inode et commit est l'instantané de version composé de plusieurs nœuds de fichier inode.

Dans Git, les objets sont généralement représentés sous forme de hachages SHA1. La valeur de hachage SHA1 est une chaîne hexadécimale de 40 caractères. Git utilise les hachages SHA1 pour attribuer un identifiant unique à chaque version, chaque fichier et répertoire et chaque validation.

Utilisation du format de fichier compressible

La couche inférieure de Git utilise une technologie qui ajoute une partie des métadonnées au fichier pour gérer les modifications de code. Les métadonnées sont souvent un état intermédiaire, comme une modification d'informations entre deux commits. Ces informations peuvent être compressées dans de petits fichiers et décompressées si nécessaire.

Le format de fichier par défaut utilisé par Git est le format packfile. Packfile est un format de stockage d'objets Git hautement compressé qui peut archiver plusieurs objets dans un seul fichier pour les transférer lorsque Git effectue des opérations inter-réseaux.

Le processus de traitement de base sous-jacent de Git

Dans le contenu précédent, nous avons découvert en détail les objets Git et la technologie de stockage de fichiers sous-jacente, et nous entrerons ensuite dans le traitement de base sous-jacent de Git processus.

Processus d'initialisation de Git

    Create directory.git/
  1. Create subdirectory.git/objects/
  2. # 🎜🎜 #Créer un sous-répertoire.git/refs/
  3. Créer un fichier HEAD vide
  4. Créer un fichier d'index vide
  5. #🎜🎜 #Fichier de base de Git commands
Voici une brève introduction aux différentes commandes de fichiers de base de Git :

hash-object commande : utilisée pour transférer des fichiers dans un objet Git.

    commande cat-file : utilisée pour afficher le contenu des objets Git.
  1. commande ls-tree : utilisée pour afficher le contenu d'une certaine arborescence Git.
  2. commande update-index : utilisée pour ajouter des fichiers ou des répertoires à l'index Git.
  3. commande write-tree : utilisée pour convertir l'index Git en un objet arborescence Git.
  4. Le processus de soumission de Git
Le processus de soumission de Git est toujours composé de trois champs : Blob, Tree et Commit.

Blob : utilisé pour représenter les métadonnées de chaque fichier dans le code, y compris le nom du fichier, le type de fichier et bien sûr la valeur de hachage SHA1, etc.

    Tree : Sur la base du Blob de l'étape précédente, assemblez les fichiers et répertoires correspondants pour former une arborescence d'instantanés et enregistrez-la dans un nœud Git.
  1. Commit : Assemblez les deux objets ci-dessus ainsi que les informations utilisateur soumises pour former un instantané de version.
  2. Dans les étapes ci-dessus, certaines choses nécessitent une attention particulière. Par exemple, lors de la conversion Blob, vous devez ajouter le paramètre -g.
Le processus de branchement de Git

Dans Git, les branches sont des pointeurs indépendants pointant vers le dernier objet soumis. Il existe deux types de succursales : les succursales locales et les succursales distantes.

Une fois la branche locale créée, l'ajout d'une nouvelle soumission déplacera automatiquement HEAD pour pointer vers la dernière soumission. Pendant cette période, la commande checkout est utilisée pour basculer entre les différentes branches. Les branches distantes font référence à un moyen de collaborer du code entre différentes bibliothèques locales.

Summary

Cet article développe le processus de traitement sous-jacent de Git sous deux aspects : la méthode de stockage de fichiers sous-jacente de Git et le processus de traitement de base sous-jacent de Git. Grâce à l'explication des objets Git et de la technologie de stockage de fichiers sous-jacente, nous comprenons l'architecture sous-jacente de Git. Cet article présente également le processus de traitement de base sous-jacent de Git, y compris le processus d'initialisation de Git, les commandes de fichiers de base de Git, le processus de soumission de Git et le processus de branchement de Git. Grâce à une compréhension approfondie du flux de traitement sous-jacent de Git, nous pouvons mieux comprendre le mécanisme de fonctionnement de Git et utiliser Git pour le contrôle de version plus efficacement.

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