web-dev-qa-db-fra.com

Comment supprimer un fichier suivi par git-lfs et libérer le quota de stockage?

Comment supprimer un fichier jamais réutilisé et libérer le stockage sur le quota github lfs?

La suppression du point de référence du fichier dans l'historique git fonctionne-t-elle dans cette situation?

30
lucemia

Il ne semble pas actuellement être un excellent moyen de supprimer de gros éléments de git-lfs. La suggestion actuelle de GitHub est d'utiliser un outil appelé The BFG pour supprimer complètement toute l'existence du fichier de votre dépôt.

Vraisemblablement, il sera ensuite supprimé du stockage lfs lorsque la récupération de place de git sera exécutée par Github.

Pour plus d'informations, voir https://help.github.com/articles/working-with-large-files/

12
Wader

La réponse donnée par Wader n'est pas liée à la question.

Le lien donné vers un article github concerne les gros fichiers directement archivés dans le dépôt git, ce qui n'est PAS le même que git-lfs!

Quant à la question: comment cette situation est gérée dépend du serveur de stockage sous-jacent. La prise en charge de git-lfs peut être fournie par différents services, par ex. GitHub ou GitLab.

GitLab stocke les fichiers git-lfs non par référentiel. Ils sont stockés par leur valeur de hachage SHA-256. Si le même fichier est utilisé dans plusieurs référentiels (par exemple des clones), il n'est stocké qu'une seule fois. Cela dépend uniquement de GitLab sur la façon dont il gère les fichiers référencés et doit être recherché dans le manuel.

Selon la documentation de GitHubs ( https://help.github.com/articles/removing-files-from-git-large-file-storage/ ), il est recommandé de supprimer et recréer un référentiel: "Pour supprimer des objets Git LFS d'un référentiel, supprimez et recréez le référentiel. Lorsque vous supprimez un référentiel, tous les problèmes, étoiles et fourches associés sont également supprimés."

9
Chris

La réponse donnée par Chris n'est pas exacte; combiné avec le commentaire de 0xcaff (" c'est une solution terrible"), il peut induire en erreur l'utilisateur inexpérimenté (ou le lecteur distrait).

La bonne réponse est un mélange de Wader et Chris '.

Je viens de résoudre un cas où je voulais mettre en miroir un référentiel (appelons-le REPO-1) qui il était une fois utilisait LFS, mais n'a pas été nettoyé de l'historique des gros fichiers.

À un moment donné au cours du dernier mois, j'ai supprimé la prise en charge de LFS dans REPO-1 avec git lfs uninstall. Et cela fonctionnait bien pour les git clones ( c.-à-d., non git-lfs plus). Mais aujourd'hui, quand j'ai essayé de pull a précédemment Push --mirror version de REPO-1 J'ai reçu des messages Smudge error: Error downloading <big-filename> ... Object does not exist on the server: [404] Object does not exist on the server

Donc, si vous voulez vous débarrasser de LFS et de toute référence aux fichiers à suivi unique, vous devez:

  1. désinstaller LFS du référentiel;
  2. nettoyer l'historique du dépôt;
  3. supprimer (ou renommer) l'ancien référentiel (github), en créer un nouveau et y insérer le référentiel nettoyé.

1

Pour désinstaller LFS est une simple commande comme git lfs uninstall le fera.

2

Nettoyer l'historique du dépôt est un peu effrayant, mais fonctionne très bien avec git filter-branch, élément 3 des documents Github -- https://help.github.com/en/articles/removing-sensitive -data-from-a-repository - devrait suffire:

$ git filter-branch --force --index-filter \
      "git rm --cached --ignore-unmatch FILENAME-1 FILENAME-2 FILENAME-3" \
      --Prune-empty --tag-name-filter cat -- --all

3

La suppression et la recréation du référentiel ne sont pas aussi destructrices qu'il n'y paraît, rappelez-vous que votre référentiel local est complètement indépendant et autonome clone de ce qui se trouve dans Github. Lorsque vous poussez la version locale (propre) vers le nouveau référentiel vierge, ce sera comme si (suppression/création) ne s'était jamais produit.

0
Brandt