Table des matières
Contexte
GIT LFS (Large File Storage)
Migration
Configuration du serveur GIT LFS
Installation du client GIT LFS
Migrer l'entrepôt historique local
迁移一些补充说明
清理前后仓库对比
Maison outils de développement git Apprenez les instructions d'amincissement de l'entrepôt GIT et de migration GIT LFS en dix minutes

Apprenez les instructions d'amincissement de l'entrepôt GIT et de migration GIT LFS en dix minutes

Jan 07, 2022 pm 05:17 PM
git

Cet article vous apporte des connaissances pertinentes sur l'amincissement de l'entrepôt GIT et les instructions de migration GIT LFS. J'espère qu'il sera utile à tout le monde.

Apprenez les instructions d'amincissement de l'entrepôt GIT et de migration GIT LFS en dix minutes

Contexte

J'ai déjà utilisé CI/CD sur certains projets git et j'ai découvert que le clone git de jenkins avait échoué, ainsi que la définition de la profondeur et du temps de clonage. Nous ne pouvons envisager que des stratégies telles que la réduction de la taille des entrepôts. Il a été constaté que l'entrepôt contient de nombreux fichiers binaires et que ces fichiers binaires changent assez fréquemment. Cette opération entraînera une croissance exponentielle de l'entrepôt git et Git lui-même ne convient qu'à la gestion de fichiers texte.

Une autre histoire intéressante est que j'avais autrefois un collègue qui était programmeur graphique. Le code source de ce langage était sous forme d'images, et le fichier était très volumineux, et les projets de la petite entreprise changeaient. fréquemment, ce qui a conduit à la constitution d'une équipe interne à l'entreprise peu de temps après. Le disque dur du serveur git est en fait plein pour plusieurs de ses référentiels git.

GIT LFS (Large File Storage)

Bien que git n'ait jamais été adapté à la gestion de fichiers binaires, git semble désormais fournir par défaut git lfs, un plug-in spécialement conçu pour gérer des fichiers volumineux.

Le principe de base est simplement d'utiliser un pointeur de fichier (texte) au lieu du stockage réel du fichier. Git stocke uniquement l'historique des modifications du pointeur de fichier au lieu de l'intégralité du fichier binaire, et lorsqu'il est utilisé, il fournit automatiquement des hooks, ce qui est pratique. pour clone , pull, reset et d'autres opérations obtiendront automatiquement les fichiers binaires sources de ces pointeurs de fichiers. De même, lors de la mise à jour de la validation du fichier binaire, git convertira automatiquement le fichier source en pointeur de fichier et l'entrera dans le journal git, et à. en même temps, le fichier source sera téléchargé sur lfs. Ainsi, au niveau utilisateur, l’utilisation de GIT LFS est en réalité insensée.

Migration

Ce qui précède présente brièvement GIT LFS. Ensuite, nous parlerons directement de la façon de migrer. Quant à la raison pour laquelle nous parlons directement de migration au lieu de comment utiliser LFS à partir de zéro.
En effet, lorsque vous utilisez l'entrepôt git, vous constatez souvent que l'entrepôt est très grand et que le clonage est très lent, et vous pensez ensuite à utiliser LFS.

La migration nécessite que nous ayons des droits d'administrateur de l'entrepôt, et de déprotéger la branche protégée
La migration spécifique LFS se divise principalement en les étapes suivantes ;

Il est préférable de faire une sauvegarde avant la migration et de bien communiquer avec les collègues de votre équipe. Après tout, l'opération implique -f des opérations à haut risque, et il est facile d'en prendre la responsabilité.

Configuration du serveur GIT LFS

Si vous créez des services git auto-construits, vous devrez peut-être activer LFS côté serveur, comme gitlab.

Installation du client GIT LFS

Le package d'installation git pour Windows est livré avec ce plug-in. Aucune installation supplémentaire n'est requise. D'autres plates-formes peuvent l'installer elles-mêmes, lien.

Essayez les commandes suivantes sur la ligne de commande.

git lfs

S'il existe des informations similaires au document d'aide, cela signifie qu'il existe déjà un client git lfs.

git-lfs/2.11.0 (GitHub; windows amd64; go 1.14.2; git 48b28d97)git lfs <command> [<args>]Git LFS is a system for managing and versioning large files in
association with a Git repository.  Instead of storing the large files
within the Git repository as blobs, Git LFS stores special "pointer
files" in the repository, while storing the actual file contents on a
Git LFS server.  The contents of the large file are downloaded
automatically when needed, for example when a Git branch containing
the large file is checked out.Git LFS works by using a "smudge" filter to look up the large file
contents based on the pointer file, and a "clean" filter to create a
new version of the pointer file when the large file's contents change.It also uses a pre-push hook to upload the large file contents to
the Git LFS server whenever a commit containing a new large file
version is about to be pushed to the corresponding Git server.</args></command>
Copier après la connexion

Ensuite, vous devez exécuter la commande suivante pour configurer l'environnement global LFS. Il ne doit être configuré qu'une seule fois, et les hooks de l'entrepôt actuel seront également mis à jour en même temps

git lfs install

Migrer l'entrepôt historique local

Idée de base de la migration lfs : réécriture lfs de l'historique local —>la poussée forcée écrase l'extrémité distante pour obtenir l'effet de migration.
Nous ferions donc mieux de synchroniser l'entrepôt local avec celui distant et de créer des branches locales pour toutes les succursales distantes ;
Ensuite, cd vers votre entrepôt local, exécutez la commande suivante, –include contient l'expression glob et ajoutez LFS par vous-même. nom du fichier géré, – tout représente toutes les branches locales

git lfs migrate import --include="*.bin,*.lib,*.so,*.dll,*.a,*.param,*.zip,*.gz" --everything
Copier après la connexion
migrate: Sorting commits: ..., done.
migrate: Rewriting commits: 100% (193/193), done.
  develop                       bacb490a80ea46d73bd3866c2e7cf7ad199ce5eb -> 72884bcb4629417bad73ea3d485d08a0708909cd
  feature/npu-platform          a3645632756becc527c7f4d58514b3c479f824d3 -> e227900a3903b3a6955e4dffee48daeceac6cdff
  master                        1ccdecdcb4b5d6224a6e24c6f87793bfcc15ee4c -> 1d9fc2139600ef3d92a20d65bb5db89021b8c488
  0.1.0                         07c6b2aa732506f1cc88cedb551f37f376b6efa6 -> 8e55193221dfca9f6bb28ccd9cca85af9c5958c9
  1.0.0                         0f694efcd7aa9df641836e1ea6eebbb730b940b5 -> 3f9e77575120b6e56b34790c998a362116da75f5
migrate: Updating refs: ..., done.
Copier après la connexion

Après avoir réécrit les branches locales, les balises, etc.,

Nous pouvons d'abord exécuter git lfs ls-files ici pour voir quels fichiers ont été convertis en gestion lfs, vérifiez si il y a des omissions
Apprenez les instructions damincissement de lentrepôt GIT et de migration GIT LFS en dix minutes

À ce moment, quelle que soit la branche sur laquelle vous vous trouvez, le fichier .gitattributes apparaîtra et un contenu similaire à celui-ci sera ajouté.

*.bin filter=lfs diff=lfs merge=lfs -text
*.lib filter=lfs diff=lfs merge=lfs -text
*.so filter=lfs diff=lfs merge=lfs -text
*.dll filter=lfs diff=lfs merge=lfs -text
*.a filter=lfs diff=lfs merge=lfs -text
*.param filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
Copier après la connexion

En même temps, vous pouvez voir que tous nos fichiers binaires ont été convertis sous la forme de texte suivante

version https://git-lfs.github.com/spec/v1
oid sha256:9171c8350d72ccca6ad60ac80b577157ad1f9fd44ca05744216e02ccbfcdf491
size 10260
Copier après la connexion

Confirmez qu'il est correct, puis vous pourrez le pousser vers l'extrémité distante ;
Depuis la migration de lfs réécrira tous les commits et modifiera la valeur de hachage, nous devons donc ajouter –froce
Cette étape nécessite d'annuler la branche protégée (les branches protégées ne peuvent pas être -f)

git push --force --all
Copier après la connexion

De cette façon, la migration lfs de l'entrepôt distant est terminée

迁移一些补充说明

  1. 迁移者的本地仓库lfs文件转源文件:经过以上步骤,由于我们将所有文件都已经转成文件指针,我们需要将文件下载回来才能正常使用该仓库。
    需要注意,其他人重新clone 或者同步 lfs迁移过的remote仓库 是不需要该步,只针对迁移作者本地的仓库。
git lfs pull
Copier après la connexion
  1. 团队中其他成员迁移前的本地仓库同步: 由于远程仓库的历史已经被全部重写,所以无法直接同步,最好是删除本地分支,重新拉取远程分支,如果本地已经有部分commit需要提交,可以重名本地分支,拉取远程再做cherry pick。git tag 同理,删除迁移前的tag。
  2. 本地仓库清理:上面的迁移成功将二进制文件迁移成git lfs 对象,git log 也不在存储源文件文件变更而是指针变更,但是在本地.git文件夹中仍存在之前不再需要的git log 缓存,执行以下命令做清理。
git reflog expire --expire-unreachable=now --all
git gc --prune=now
Copier après la connexion

清理前后仓库对比

lfs直观来讲更多的是针对仓库大clone慢的问题,我这边lfs迁移前后各备份各一个小型远程仓库做测试,
用的测试仓库二进制文件比较小,总大50m内,且变更次数也在个位数。
clone下来的仓库大小对比。
和我预估差不多,总的来说更适合二进制文件频繁变更,如果单纯是文件大,但文件不变更的话,在clone的时候区别不大,毕竟lfs在clone仍有下载源文件的步骤,除开下载,操作文件指针对git来说理论仍会有性能提升,但是可能感知不强。
Apprenez les instructions damincissement de lentrepôt GIT et de migration GIT LFS en dix minutes

推荐学习:《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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment supprimer un référentiel par git Comment supprimer un référentiel par git Apr 17, 2025 pm 04:03 PM

Pour supprimer un référentiel GIT, suivez ces étapes: Confirmez le référentiel que vous souhaitez supprimer. Suppression locale du référentiel: utilisez la commande RM -RF pour supprimer son dossier. Supprimer à distance un entrepôt: accédez à l'entrepôt, trouvez l'option "Supprimer l'entrepôt" et confirmez l'opération.

Comment se connecter au réseau public du serveur GIT Comment se connecter au réseau public du serveur GIT Apr 17, 2025 pm 02:27 PM

La connexion d'un serveur GIT au réseau public comprend cinq étapes: 1. Configurer l'adresse IP publique; 2. Ouvrez le port de pare-feu (22, 9418, 80/443); 3. Configurer l'accès SSH (générer des paires de clés, créer des utilisateurs); 4. Configurer l'accès HTTP / HTTPS (installer les serveurs, configurer les autorisations); 5. Testez la connexion (en utilisant les commandes SSH Client ou GIT).

Comment gérer le conflit du code GIT Comment gérer le conflit du code GIT Apr 17, 2025 pm 02:51 PM

Le conflit de code fait référence à un conflit qui se produit lorsque plusieurs développeurs modifient le même morceau de code et provoquent la fusion de Git sans sélectionner automatiquement les modifications. Les étapes de résolution incluent: ouvrez le fichier contradictoire et découvrez le code contradictoire. Furiez le code manuellement et copiez les modifications que vous souhaitez maintenir dans le marqueur de conflit. Supprimer la marque de conflit. Enregistrer et soumettre des modifications.

Comment ajouter des clés publiques au compte GIT Comment ajouter des clés publiques au compte GIT Apr 17, 2025 pm 02:42 PM

Comment ajouter une clé publique à un compte GIT? Étape: générer une paire de clés SSH. Copiez la clé publique. Ajoutez une clé publique dans Gitlab ou GitHub. Testez la connexion SSH.

Comment utiliser le référentiel GIT Comment utiliser le référentiel GIT Apr 17, 2025 pm 04:06 PM

Un référentiel GIT est l'emplacement de stockage pour l'historique des versions du code et du fichier qui est utilisé pour suivre les modifications, collaborer et gérer les versions du projet. Pour utiliser un référentiel GIT, effectuez les étapes suivantes: Créez un référentiel: Exécutez Git init. Ajouter un fichier: utilisez GIT ADD pour ajouter le fichier dans la zone de stadification. Commissez les modifications: utilisez GIT Engagez pour stocker les modifications de stadification du référentiel. Modifications de poussée: utilisez Git Push pour pousser les modifications dans un référentiel distant. Modifications de traction: utilisez Git Pull pour obtenir des modifications du référentiel distant. Branche: Créez une branche à l'aide de la branche GIT. Merge: Utilisez GIT Merge pour fusionner les modifications de différentes branches. Tag: utilisez la balise git

Comment soumettre des dossiers vides dans git Comment soumettre des dossiers vides dans git Apr 17, 2025 pm 04:09 PM

Pour soumettre un dossier vide dans GIT, suivez simplement les étapes suivantes: 1. Créez un dossier vide; 2. Ajouter le dossier à la zone de stadification; 3. Soumettre les modifications et saisir un message de validation; 4. (Facultatif) Poussez les modifications au référentiel distant. Remarque: le nom d'un dossier vide ne peut pas commencer. Si le dossier existe déjà, vous devez utiliser Git Add --Force pour ajouter.

Comment créer un projet dans Git Comment créer un projet dans Git Apr 17, 2025 pm 04:18 PM

La création d'un projet utilisant GIT nécessite les étapes suivantes: 1. Installez le site Web officiel de GIT pour télécharger la version correspondante de Git et l'installer; 2. Initialisez le projet pour créer un référentiel à l'aide de Git init; 3. Ajouter des fichiers pour ajouter des fichiers à la zone de stockage temporaire avec Git Add; 4. Soumettre des modifications à commettre et ajouter des instructions; 5. Pousser les changements pour les pousser avec Git Push; 6. Tirez les modifications pour utiliser Git Pull pour obtenir les dernières modifications du référentiel distant à l'aide de Git Pull.

Comment télécharger des projets GIT vers local Comment télécharger des projets GIT vers local Apr 17, 2025 pm 04:36 PM

Pour télécharger des projets localement via GIT, suivez ces étapes: installer Git. Accédez au répertoire du projet. Clonage du référentiel distant à l'aide de la commande suivante: Git Clone https://github.com/username/repository-name.git

See all articles