Maison  >  Article  >  outils de développement  >  A quoi servent les fichiers git pack ?

A quoi servent les fichiers git pack ?

WBOY
WBOYoriginal
2022-06-30 17:41:486922parcourir

Dans git, les fichiers pack peuvent utiliser efficacement le cache disque et fournir des modes d'accès aux commandes courantes pour lire les objets récemment référencés ; git regroupera plusieurs objets spécifiés dans un fichier binaire appelé fichier pack (packfile) Utilisé pour économiser de l'espace et améliorer l'efficacité. .

A quoi servent les fichiers git pack ?

L'environnement d'exploitation de cet article : système Windows 10, Git version 2.30.0, ordinateur Dell G3.

À quoi servent les fichiers du pack de Git ?

Les fichiers du pack de Git sont soigneusement construits pour utiliser efficacement le cache disque et fournir des modèles d'accès « sympas » pour les commandes courantes et la lecture des objets récemment référencés.

Le format de fichier du package Git est assez flexible (voir documentation/tech/package-format.txt, ou placez le fichier du package dans le livre de la communauté Git).

Les fichiers Pack stockent les objets de deux manières principales : "non supprimés" (obtenir les données de l'objet d'origine et les compresser) ou "supprimer" (former un delta par rapport à un autre objet, puis compresser les données delta résultantes)).

Les objets stockés dans le paquet peuvent être classés dans n'importe quel ordre (pas nécessairement (nécessairement) par type d'objet, nom d'objet ou toute autre propriété), et les objets supprimés peuvent être créés par rapport à tout autre objet approprié du même type.

La commande pack-objects de Git utilise plusieurs heuristiques qui fournissent d'excellents emplacements de référence pour les commandes courantes.

Ces heuristiques contrôlent à la fois la sélection des objets de base pour les objets supprimés et l'ordre des objets.

Chaque mécanicien est pour la plupart indépendant, mais ils partagent des objectifs communs.

Git forme de longues chaînes d'objets compressés delta, mais l'heuristique tente de garantir que seuls les "anciens" objets se trouvent à la fin de la longue chaîne.

core.deltaBaseCacheLimit utilise automatiquement un cache de base delta (dont la taille est contrôlée par une variable de configuration) et peut réduire considérablement le nombre de "reconstructions" requises par les commandes qui doivent lire un grand nombre d'objets (comme git log - p).

Heuristique de compression Delta Les référentiels Git typiques stockent un grand nombre d'objets, il est donc impossible de comparer raisonnablement tous les objets pour trouver des paires (et des chaînes) qui produiront la plus petite représentation delta. L'heuristique de sélection de base delta est basée sur l'idée que de bonnes bases delta peuvent être trouvées parmi des objets ayant des noms et des tailles de fichiers similaires.

Chaque type d'objet est traité séparément (c'est-à-dire qu'un objet d'un type n'est jamais utilisé comme base incrémentielle pour un objet d'un autre type).

Aux fins de sélection de base incrémentielle, les objets sont triés (principalement) par nom de fichier et par taille. La fenêtre sur cette liste triée permet de limiter le nombre d'objets considérés comme des bases incrémentales potentielles.

Connaissances étendues :

Le fichier .git/objects/pack est trop volumineux

Cela peut être dû au téléchargement de fichiers trop volumineux pendant le processus de développement. Bien qu'il ait été supprimé, il est toujours enregistré dans l'enregistrement git.

Solution :

1. Supprimez le projet dans l'entrepôt et soumettez à nouveau le code.

2. Effacez complètement l'historique

1. Identifiez les trois plus gros fichiers

git verify-pack -v .git/objects/pack/pack-8eaeb...9e.idx | sort -k 3 -n | tail -3
296169a146c50dbc100a5d0ee5be87a45cd7cbb3 blob   50296832 49474116 291684796
 
aae2c1bf6109f2729502349722b4c3402626d755 blob   77762481 77330392 78759794
 
35047899fd3b0dd637b0da2086e7a70fe27b1ccb blob   100534272 100014418 191670176

2. Recherchez le nom du gros fichier

git rev-list --objects --all | grep 35047899fd3b0dd637b0da2086e7a70fe27b1ccb
35047899fd3b0dd637b0da2086e7a70fe27b1ccb /wabapi/bulid/master-0.0.1.jar

3. Supprimez le fichier de toutes les arborescences de l'historique

git filter-branch --index-filter 'git rm --cached --ignore-unmatch  /wabapi/bulid/master-0.0.1.jar'

. la déclaration suivante

rm -rf .git/refs/original/
 
git reflog expire --expire=now --all
 
git fsck --full --unreachable
 
git repack -A -d
 
git gc --aggressive --prune=now
 
git push --force

Apprentissage recommandé : "Tutoriel Git"

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