Réduire un dépôt Git en supprimant certains fichiers de l'historique du journal du dépôt Git. .git
Dossier basé sur leur dernière heure de mise à jour.
J'ai rencontré le même problème sur ma machine locale. La raison en est que j'ai supprimé quelques fichiers massifs de ma machine locale et les ai transférés dans le référentiel central. Mais après git status
, git fetch
y git pull
. Mon .git
La taille du dossier est d'environ 3 Go. J'ai ensuite exécuté la commande suivante pour réduire la taille du dossier .git
en considérant les fichiers qui ont été modifiés/expirés il y a un mois.
Commande
$ git remote prune origin && git repack && git prune-packed && git reflog expire --expire=1.month.ago && git gc --aggressive
Git
Commandes et leur brève description :
-
git-prune
- Supprimer tous les objets inaccessibles de la base de données d'objets.
-
git-repack
- Emballer les objets déballés dans un référentiel
-
git-prune-packed
- Supprimez les objets supplémentaires qui se trouvent déjà dans les fichiers du pack.
-
git reflog
: Git garde la trace des mises à jour de l'extrémité des branches en utilisant un mécanisme appelé journaux de référence, ou "reflogs". Les reflogs permettent de savoir quand les refs Git ont été mises à jour dans le dépôt local. En plus des reflogs des extrémités des branches, un reflog spécial est maintenu pour la cachette Git. Les reflogs sont stockés dans des répertoires sous le répertoire .git
Les répertoires git reflog se trouvent à l'adresse suivante .git/logs/refs/heads/.
, .git/logs/HEAD
et aussi .git/logs/refs/stash
si la cachette git a été utilisée sur le repo. git reflog à un niveau élevé sur le repo Rewriting History
Page.
git reflog expire --expire=now --expire-unreachable=now --all
En plus de préserver l'historique dans le reflog, Git a des dates d'expiration internes sur le moment où il élague les commits détachés. Encore une fois, il s'agit de détails d'implémentation que git gc
les poignées et git prune
ne doit pas être utilisé de manière autonome.
-
git gc --aggressive
: git-gc - Nettoyer les fichiers inutiles et optimiser le référentiel local.
Dans les coulisses, git gc exécute en fait un paquet d'autres sous-commandes internes comme git prune, git repack, git pack and git rerere
. La responsabilité de haut niveau de ces commandes est d'identifier tous les objets Git qui sont en dehors des niveaux de seuil définis à partir de la base de données de l'entreprise. git gc
configuration. Une fois identifiés, ces objets sont ensuite compressés ou élagués en conséquence.
Commonad avec le résultat :
$ git remote prune origin && git repack && git prune-packed && git reflog expire --expire=1.month.ago && git gc --aggressive
Enumerating objects: 535, done.
Counting objects: 100% (340/340), done.
Delta compression using up to 2 threads
Compressing objects: 100% (263/263), done.
Writing objects: 100% (340/340), done.
Total 340 (delta 104), reused 0 (delta 0)
Enumerating objects: 904, done.
Counting objects: 100% (904/904), done.
Delta compression using up to 2 threads
Compressing objects: 100% (771/771), done.
Writing objects: 100% (904/904), done.
Total 904 (delta 343), reused 561 (delta 0)
2 votes
Pouvez-vous afficher la sortie de
git count-objects -v
?4 votes
Duplicata possible de Réduire la taille du dépôt git
0 votes
Mon problème était
git lfs
prenait des tonnes d'espace dans le.git/lfs
dir. En exécutantgit lfs prune
J'ai réduit mon.git
taille du dossier par >60 GO ! J'ai ajouté ces informations et d'autres encore dans ma réponse ici .