Pendant le premier clone d’un référentiel, git reçoit tout d’abord les objets (qui est assez évident) et ensuite passe environ la même quantité de temps « resolving deltas ». Ce qui se passe réellement au cours de cette phase du clone ?
Réponses
Trop de publicités?Les étapes de l' git clone
sont:
- Recevoir un "pack" fichier de tous les objets dans les pensions de base de données
- Créer un fichier d'index pour le reçu pack
- Découvrez la tête de révision (pour un non-nue repo, évidemment)
"La résolution des deltas" est le message affiché pour la deuxième étape, l'indexation du fichier de pack ("git index-pack").
Fichiers de Pack de ne pas avoir la réelle Id d'objet en eux, seul le contenu de l'objet. Donc, pour déterminer ce que les Id d'objet sont, git a faire un décompresser+SHA1 de chaque objet dans le pack afin de produire de l'ID de l'objet, qui est ensuite écrite dans le fichier d'index.
Un objet dans un pack de fichiers peuvent être stockés sous forme d'un delta, c'est à dire une séquence de changements à apporter à un autre objet. Dans ce cas, git a besoin de récupérer l'objet de base, appliquer les commandes et SHA1 le résultat. La base de l'objet lui-même peut être obtenu en appliquant une séquence de delta commandes. (Même si, dans le cas d'un clone de l'objet de base auront été rencontré déjà, il y a une limite au nombre d'objets fabriqués sont mis en cache dans la mémoire).
En résumé, la "résolution des deltas" étape consiste à décompresser et de somme de contrôle de l'ensemble des pensions de base de données, ce qui n'est pas surprenant prend un temps assez long. Sans doute la décompression et le calcul de SHA1s prend plus de temps que d'appliquer le delta commandes.
Dans le cas d'une extraction, le reçu le pack de fichier peut contenir des références (comme le delta de l'objet de bases) à d'autres objets que la réception de la commande git devrait déjà avoir. Dans ce cas, la réception de la commande git en fait réécrit le reçu fichier du pack de tout les objets référencés, de sorte que toute stockées pack fichier est auto-suffisant. Ce pourrait être d'où le message "résolution des deltas" d'origine.
Git utilise delta encodage pour stocker les objets dans packfiles. Cependant, vous ne voulez pas avoir à lire tous les changements jamais sur un fichier afin d'obtenir la version actuelle, donc Git aussi a l'occasion des instantanés du contenu des fichiers stockés. "La résolution des deltas" est l'étape qui traite de s'assurer que tout reste cohérent.
Voici un chapitre de la "Git Internes" de la Pro Git livre, qui est disponible en ligne, qui en parle.
Amber semble décrire le modèle d’objet qui utilise Mercurial ou similaire. Git ne pas stocker les deltas entre les versions successives d’un objet, mais plutôt des instantanés de l’objet, tous à temps plein. Il compresse ensuite ces instantanés en utilisant la compression delta, essayant de trouver la bonnes deltas à utiliser, peu importe où elles existent dans l’histoire.