Ma base actuelle a une taille totale d'env. 200MB.
Mais mon dossier .git a une taille incroyable de 5 Go (!). Depuis que je pousse mon travail vers un serveur externe, je n'ai pas besoin d'une grande histoire locale ...
Comment puis-je réduire le dossier .git pour libérer de l'espace sur mon bloc-notes? Puis-je supprimer toutes les modifications datant de plus de 30 jours?
Merci beaucoup pour toute aide :)
git count-objects -v
?Réponses:
vous ne devriez pas supprimer toutes les modifications datant de plus de 30 jours (je pense qu'il est en quelque sorte possible d'exploiter git, mais vraiment déconseillé).
vous pouvez appeler
git gc --aggressive --prune
, qui effectuera le garbage collection dans votre référentiel et élagera les anciens objets. avez-vous beaucoup de fichiers binaires (archives, images, exécutables) qui changent souvent? ceux-ci mènent généralement à d'énormes dossiers .git (rappelez-vous, git stocke les instantanés pour chaque révision et les fichiers binaires se compressent mal)la source
git gc --aggressive
est considérée comme une mauvaise pratique. Il vaut mieux utilisergit repack -a -d --depth=250 --window=250
.git gc --aggressive
appelle repack avec une taille de fenêtre de 250 (cf. page de manuel) et une profondeur de 250 (cf. code source). --agressif ajoute en plus le-f
commutateur, pour jeter et refaire toutes les opérations delta précédentes (comme également mentionné dans le lien)git gc --aggressive --prune
ramené ce chiffre à 19 Mo.--prune
n'est pas non plus nécessaire car il est devenu la valeur par défaut depuisv1.5.5-rc0
(commit 25ee973 , mars 2008).Voici ce que le créateur de git Linus a à dire sur la façon de réduire votre dépôt git:
source: http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html
Cela supprimera-t-il les données binaires qui sont orphelines dans mon dépôt? "git repack" ne se débarrassera pas des images ou des données binaires que vous avez archivées dans votre référentiel puis supprimées. Pour supprimer définitivement ce type de données de votre repo, vous devez réécrire votre historique. Un exemple courant de cela est lorsque vous archivez accidentellement vos mots de passe dans git. Vous pouvez revenir en arrière et supprimer certains fichiers, mais vous devez ensuite réécrire votre historique à partir de là, puis forcer le transfert du nouveau dépôt à votre origine.
la source
fatal: Out of memory, malloc failed (tried to allocate 39763130 bytes)
repack
locale, un commit et un push, le rétrécissement sera-t-il également rendu distant?J'ai essayé ces derniers mais mon référentiel était encore très volumineux. Le problème était que j'avais accidentellement enregistré certains gros fichiers générés. Après quelques recherches, j'ai trouvé un excellent tutoriel qui facilite la suppression des gros fichiers générés. Ce tutoriel m'a permis de réduire mon référentiel de 60 Mo à <1 Mo.
la source
5 Go contre 200 Mo est un peu bizarre. Essayez de courir
git gc
.Mais non, à moins que vous ne divisiez votre référentiel en modules, vous ne pouvez pas réduire la taille du
.git
répertoire.Chaque clone d'un référentiel git est un référentiel à part entière qui peut agir comme un serveur. C'est le principe de base du contrôle de version distribué.
la source
J'utilise git plus comme mécanisme de synchronisation que pour l'historique des versions. Ma solution à ce problème a donc été de m'assurer que toutes mes sources actuelles étaient dans un état satisfaisant, puis de supprimer simplement .git et de réinitialiser les dépôts. Problème d'espace disque résolu. :-) L'histoire a disparu :-( Je fais ça parce que mon dépôt est sur une petite clé USB. Je ne veux pas ou n'ai pas besoin de tout mon historique. Si j'avais une méthode pour simplement tronquer l'historique, j'utiliserais ça.
Si je voulais garder mon historique, j'archiverais le référentiel actuel. À un moment donné plus tard, je pourrais cloner le référentiel d'origine, copier toutes les modifications du nouveau référentiel (supposons que je n'ai pas fait beaucoup (aucun) changement de nom ou suppression). Et puis faites un gros commit qui représenterait toutes les modifications apportées dans le nouveau repo comme un seul commit dans l'ancien repo. Est-il possible de fusionner les histoires? Peut-être que si j'utilisais une branche puis supprimais les objets dont je n'avais pas besoin. (Je n'en sais pas assez sur les composants internes de git pour commencer à jouer comme ça).
la source
J'ai essayé les méthodes ci-dessus, rien n'a fonctionné dans mon cas (où j'ai accidentellement tué le processus git pendant git push), donc j'ai finalement dû supprimer le dépôt et le cloner à nouveau et maintenant le dossier .git est de taille normale.
la source