Migrer un rĂ©fĂ©rentiel git utiliser Git Large File Storage pour les fichiers binairesâŠ
Si vous rencontrez cette erreur en poussant un dĂ©pĂŽt existant ou un gros fichier sur GitHub par exemple, et que vous avez un message dâinsulte comme celui ci-dessous, voici comment configurer le systĂšme de stockage de fichiers volumineux (LFS) de git et migrer votre historique git pour prendre en compte ce changement.
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
Attention, il se peut que le message ne soit pas aussi explicite en fonction du serveur. Par ailleurs, il est prĂ©fĂ©rable de migrer avant dâatteindre ce mur pour des questions de performances.
Installation de lâextension Git LFS
Sous Linux, pour installer lâextension Git LFS, vous devez simplement utiliser :
sudo apt install git-lfs
Configuration de Git LFS votre utilisateur
git lfs install
Attention, lâopĂ©ration de migration ne doit pas ĂȘtre faite sur un dĂ©pĂŽt de dĂ©veloppement, vous devez impĂ©rativement « cloner » le dĂ©pĂŽt spĂ©cifiquement pour faire cette opĂ©ration : Le dossier est devra ĂȘtre dĂ©truit aprĂšs la migration.
Choisir les fichiers qui seront traités par Git LFS
- Suivre les fichiers par extensions (par type)Â :
git lfs track "*.zip"
- Suivre un groupe de fichiers dâaprĂšs un chemin :
git lfs track "assets/*"
- Suivre tous les fichiers dâun dossier de maniĂšre rĂ©cursive :
git lfs track "assets/**/*"
- Suivre un fichier dâaprĂšs son chemin :
git lfs track "path/to/file"
git lfs track
ajoutera les fichiers suivis par Git LFS Ă .gitattributes
. Il est indispensable dâajouter ensuite .gitattributes
à votre dépÎt git
.
git add .gitattributes
Le suivi des fichiers ne convertit pas automatiquement les fichiers gérés par git
depuis votre historique git
(et encore moins sur les autres branches).
Attention, lâopĂ©ration de migration ne doit pas ĂȘtre faite sur un dĂ©pĂŽt de dĂ©veloppement, vous devez impĂ©rativement « cloner » le dĂ©pĂŽt spĂ©cifiquement pour faire cette opĂ©ration : Le dossier est devra ĂȘtre dĂ©truit aprĂšs la migration.
Migration de lâhistoire dâun dĂ©pĂŽt Git
Si vous avez des fichiers existants dans votre historique Git ou dans dâautres branches, vous devez migrer ces fichiers pour quâils soient Ă©galement suivis par Git LFS. Git LFS fournit une commande git lfs migrate
avec différentes options permettant de répondre à différentes situations.
Avant dâeffectuer votre migration, vous pouvez effectuer un essai avec git lfs migrate info [options]
.
Utilisez lâoption --everything
pour effectuer une migration dans chaque branche.
Si vous ne voulez migrer que les fichiers que vous avez ajoutés auparavant avec git lfs track
, vous les ajouterez avec lâoption --include="*.zip,src/assets"
séparés par des virgules.
Voici un exemple qui effectue une migration pour tous les fichiers Zip dâun dĂ©pĂŽt :
# Lance un essai de votre migration
git lfs migrate info --everything --include="*.zip"
# Effectue la migration
git lfs migrate import --everything --include="*.zip" --verbose
Maintenant, vous pouvez pousser (git push
) votre dépÎt vers le serveur.
Notez quâil vous faudra probablement utiliser lâoption --force
puisque nous venons de rĂ©Ă©crire lâhistoire complĂšte du dĂ©pĂŽt.
Le processus de migration pouvant ĂȘtre assez long, il est raisonnable de faire cela Ă un moment oĂč le nombre de branches ouvertes est minimal.
-
Petit script pour aider a la migration (Solution partielle)
Je vous propose de générer les lignes de commande en tenant compte du contenu de
.gitattributes
.function build_include_value { local first="true" grep ' filter=lfs diff=lfs merge=lfs -text' .gitattributes | cut -d' ' -f1 | while read -r line ; do if [ "${first}" = 'true' ] ; then first='false' else echo -n ',' fi echo -n "${line}" done }
Pour essayer la migration :
git lfs migrate info --everything --include="$( build_include_value)"
Pour effectuer la migration :
git lfs migrate import --everything --include="$( build_include_value)" --verbose
RĂ©fĂ©rences permettant dâaller beaucoup plus loinâŠ
- Migrate Git Repository to Git Large File Storage (LFS)
- Migrer vers Git LFS : gérer facilement les gros fichiers pour des projets de Deep Learning
- Pourquoi Git et Git-LFS ne suffisent pas à résoudre la crise de la reproductibilité du Machine Learning
኿