Maison > Article > outils de développement > En utilisant cette technique, git clone peut être accéléré des dizaines de fois !
Je ne sais pas si vous avez déjà rencontré un projet relativement volumineux où git clone est très lent ou même échoue. Comment tout le monde va-t-il gérer cela ?
Vous pouvez envisager de changer de source de téléchargement et d'utiliser certains moyens pour augmenter la vitesse d'Internet, mais que se passe-t-il si vous avez essayé tout cela et que cela est toujours lent ?
J'ai rencontré ce problème aujourd'hui. J'avais besoin de télécharger le code tapuscrit depuis gitlab, mais la vitesse était très lente :
git clone https://github.com/microsoft/TypeScript ts
Après une longue attente, le téléchargement n'était toujours pas terminé, j'ai donc ajouté un paramètre :
git clone https://github.com/microsoft/TypeScript --depth=1 ts
Cela a amélioré la vitesse des dizaines de fois, il a été téléchargé instantanément.
L'ajout de --deep ne téléchargera qu'un seul commit, donc le contenu sera bien moindre et la vitesse augmentera. [Recommandations associées : Tutoriel d'utilisation de Git]
Et le contenu téléchargé peut continuer à soumettre de nouveaux commits et à créer de nouvelles branches. Cela n’affecte pas le développement ultérieur, mais vous ne pouvez pas passer aux validations historiques et aux branches historiques.
Je l'ai testé avec un de mes projets. J'ai d'abord téléchargé un commit :
puis j'ai apporté quelques modifications. Après cela, git add, commit et push peuvent être soumis normalement :
. Créer de nouvelles branches peut également être soumis normalement. Le seul inconvénient est que vous ne pouvez pas passer aux commits historiques et aux branches historiques.
C'est très utile dans certains scénarios : lorsque vous devez passer à la branche historique, vous pouvez également calculer le nombre de commits nécessaires, puis spécifier la profondeur, ce qui peut également améliorer la vitesse.
Avez-vous déjà réfléchi à la raison pour laquelle cela fonctionne ?
Git enregistre les informations via certains objets :
utilise un commit comme entrée. Tous les arbres et blobs associés constituent le contenu de ce commit.
Les commits sont liés les uns aux autres, et head, branch, tag, etc. sont des pointeurs vers des commits spécifiques. Il peut être vu sous .git/refs. De cette manière, des concepts tels que les branches et les balises sont implémentés sur la base du commit.
Git implémente des fonctions de gestion de versions et de changement de branche via ces trois objets. Tous les objets peuvent être vus sous .git/objects.
C'est ainsi que fonctionne git.
Comprendre principalement les trois objets blob, tree et commit, ainsi que les références telles que head, tag, branch et remote.
Nous savons que git associe tous les objets via un certain commit comme point d'entrée, donc si nous n'avons pas besoin d'historique, nous ne pouvons naturellement télécharger qu'un seul commit.
De cette façon, un nouveau commit est toujours créé sur la base de ce commit, et de nouveaux blobs, arbres, etc. sont associés. Cependant, les commits, arborescences et blobs historiques ne peuvent pas être rétablis car ils n'ont pas été téléchargés, pas plus que les balises, branches et autres pointeurs correspondants. C'est ainsi que nous téléchargeons un seul commit mais pouvons toujours créer de nouvelles branches, commits, etc.
Lorsque vous rencontrez un grand projet Git, vous pouvez considérablement améliorer la vitesse en ajoutant le paramètre --degree. Plus il y a de commits historiques, plus l'amélioration de la vitesse de téléchargement est importante.
Et le projet téléchargé peut toujours être développé pour un développement ultérieur, et de nouveaux commits, de nouvelles branches et balises peuvent être créés, mais vous ne pouvez pas passer aux commits, branches et balises historiques.
Nous avons réglé les principes de git : les fichiers et les informations de soumission sont stockés via les trois objets tree, blob et commit, et des fonctions telles que les branches et les balises sont implémentées via l'association entre les commits. Commit est le point d’entrée, associé à tous les arbres et blobs.
Lorsque nous téléchargeons un commit, nous téléchargeons tous ses arbres, blobs et certaines références associés (y compris les balises, les branches, etc.). C'est le principe de --deep.
J'espère que vous pourrez utiliser cette technique pour améliorer la vitesse de clonage git des grands projets sans passer aux commits et branches historiques.
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!