Comment stocker des fichiers volumineux dans Git

0
495

Git, ainsi que des services comme Github, sont conçus et optimisés pour les fichiers de code texte légers, et il est rare de voir des dépôts de plus de quelques Go. Mais, il est souvent utile de suivre des fichiers volumineux, et pour rendre cela plus facile, Git fournit l'extension Large File Storage (LFS).

Fonctionnement de Git Large File Storage (LFS)

Techniquement, Git n'a pas de taille de fichier maximale, mais il commence à tomber en panne une fois que vous commencez à atteindre une certaine taille de fichiers. Github définit ce maximum à 100 Mo par référentiel.

Cette limite souple dépend de la façon dont Git stocke les données en interne. Bien qu'il affiche les listes de modifications des utilisateurs, appelées diffs, Git utilise en fait une approche basée sur des instantanés pour stocker les données en interne, et l'utilise pour reconstruire les diffs, plutôt que l'inverse.

C'est bien pour de petites quantités de données, mais cela signifie que chaque fois qu'un fichier est modifié, un instantané doit être fait, et donc si le fichier est très volumineux, il peut rapidement prendre beaucoup de place. Git gère cela un peu en interne avec “packfiles,” qui peut faire du ramasse-miettes, mais le problème de travailler avec des fichiers volumineux demeure.

Ainsi, une solution appelée Git Large File Storage (LFS) a été créée. Fondamentalement, plutôt que de stocker le fichier réel dans le référentiel, Git LFS stocke simplement un pointeur vers l'endroit où se trouve réellement ce fichier. Lorsque votre client Git souhaite cloner un référentiel ou extraire le fichier, il le télécharge à partir de Git LFS à la place.

Publicité

Cela signifie que vous n'aurez plus besoin de télécharger chaque objet versionné juste pour cloner le repo. LFS accélère la mise en route du référentiel car Git ne se soucie que du pointeur, qui est petit, et ne récupère que les données dont il a besoin.

Le principal inconvénient est que vous ne pouvez plus utiliser les packfiles, ce qui signifie que vous aurez besoin d'un espace de stockage supplémentaire pour chaque copie d'un fichier. Mais, avec LFS vous permettant d'avoir un référentiel massif avec des temps de clonage optimaux, cela n'affecte pas l'expérience du développeur.

Où pouvez-vous utiliser Git LFS ?

Pour l'utiliser, vous aurez besoin d'un serveur configuré pour utiliser Git LFS. C'est juste une extension de Git, vous n'avez donc pas besoin d'installer de logiciel supplémentaire ou de configurer des serveurs pour gérer le stockage des données.

Github prend en charge Git LFS, mais n'autorise que 10 Go par référentiel. Cela s'applique aux repos normaux ainsi qu'aux repos LFS. Cependant, il est assez facile d'acheter plus de données à partir de Paramètres > Facturation, et 50 Go ne représentent qu'un supplément de 4,20 $ par mois :

Vous’ll il faut aussi payer pour la bande passante, car la mise à jour de gros fichiers fait une copie du fichier et doit envoyer le tout.

Si vous souhaitez héberger des référentiels particulièrement volumineux et que vous souhaitez le faire sur votre propre matériel, nous vous recommandons d'utiliser Gitlab auto-hébergé. Vous pouvez lire notre guide sur la configuration d'une instance Gitlab personnelle pour en savoir plus.

CONNEXION : Comment configurer un serveur Gitlab personnel

Installation et utilisation de Git LFS

Vous devrez télécharger et installer Git LFS depuis leur site Web.

Publicité

Ensuite, ouvrez Git ou Git Bash sous Windows et exécutez la commande d'installation pour vérifier qu'elle fonctionne :

git lfs install

Git LFS fonctionne un peu séparément de Git lui-même. Il ne suit pas automatiquement les fichiers dépassant une certaine taille ; vous devrez ajouter manuellement des fichiers à Git LFS pour commencer à l'utiliser. Vous pouvez utiliser la syntaxe générique pour cela :

git lfs track “*.dat”

Vous pouvez utiliser ls-files et status pour afficher l'état du sous-système Git LFS lui-même :

git lfs ls- fichiers git lfs status

Migration vers Git LFS

Si vous venez d'un dépôt Git existant, ou si vous avez accidentellement commité quelque chose sans suivi préalable dans Git LFS, vous devrez utiliser l'outil de migration pour déplacer les données vers LFS.

Par exemple, pour importer tous les fichiers existants correspondant à un caractère générique :

git lfs migrate import — include=”*.mp4″

Ou tout simplement envoyer tout à LFS :

git lfs migrate import –everything

Vous devrez peut-être faire git push –force pour écraser l'historique de la branche.