367 votes

Réduire la taille du dépôt git

J'ai essayé de chercher un bon tutoriel sur la réduction de la taille des repo, mais je n'en ai trouvé aucun. Comment puis-je réduire la taille de mon dépôt ? Il fait environ 10 Mo, mais le problème est que Heroku ne permet que 50 Mo et que je suis loin d'avoir fini de développer mon application.

J'ai déjà ajouté les suspects habituels (log, vendor, doc etc) à .gitignore. Bien que je n'aie ajouté .gitignore que récemment.

Des suggestions ?

1 votes

Je viens de le faire et cela l'a ramené à 2.2 mb...merci beaucoup ! Bien que cela n'ait pas semblé réduire la taille du dépôt sur Heroku.

11 votes

Poussez-le en utilisant --force. Il écrasera le contenu même s'il n'y a pas eu de changement (pas de nouveaux commits, etc.).

1 votes

@MarcinGil - Ci-dessous, VonC indique que vous devez avoir accès au serveur pour nettoyer le serveur distant (si je comprends bien).

432voto

VonC Points 414372

Mise à jour fév. 2021, onze ans plus tard : la nouvelle git maintenance comando ( page de manuel ) devrait supplanter git gc et peut être programmé .


Original : git gc --aggressive est un moyen de forcer le processus d'élagage à avoir lieu (pour être sûr : git gc --aggressive --prune=now ). Vous avez autres commandes pour nettoyer le repo aussi. N'oubliez pas cependant que parfois git gc seul peut augmenter la taille du repo !

Il peut également être utilisé après un filter-branch pour marquer certains répertoires à supprimer de l'historique (avec un gain d'espace supplémentaire) ; voir aquí . Mais cela signifie que personne ne tire de votre dépôt public. filter-branch peut garder des références de sauvegarde dans .git/refs/original pour que ce répertoire puisse aussi être nettoyé.

Enfin, comme mentionné dans ce commentaire y cette question ; le nettoyage du reflog peut aider :

git reflog expire --all --expire=now
git gc --prune=now --aggressive

Une solution encore plus complète, et peut-être dangereuse, est la suivante pour supprimer les objets inutilisés d'un dépôt git

0 votes

Dans un autre scénario, voir aussi stackoverflow.com/questions/1029969/

2 votes

Note à moi-même : n'oubliez pas les branches distantes : stackoverflow.com/questions/11255802/

2 votes

Note à moi-même : n'oubliez pas les étiquettes à distance.

111voto

sent-hil Points 3206

Merci pour vos réponses. Voici ce que j'ai fait :

git gc
git gc --aggressive
git prune

Cela semble avoir fait l'affaire. J'ai commencé avec environ 10,5 Mo et maintenant il y a un peu plus de 980 Ko.

11 votes

prune est toujours dirigé par gc (avec un défaut de 2 semaines).

138 votes

Vous pouvez exécuter les 3 avec prune jusqu'à maintenant en utilisant git gc --aggressive --prune=now

5 votes

Mais, lorsque je supprime le repo puis le clone à nouveau, la taille reste importante. Comment gérez-vous cela ?

24voto

vinzee Points 2195

Dans mon cas, j'ai poussé plusieurs gros fichiers (> 100Mb) et j'ai ensuite procédé à leur suppression. Mais ils étaient toujours dans l'historique de mon repo, donc j'ai dû les supprimer également.

Ce qui a marché, c'est :

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

Ensuite, vous devez pousser la force sur votre branche :

git push origin <your_branch_name> --force

Note : bfg est un outil qui peut être installé sur Linux et macOS à l'aide de brew :

brew install bfg

0 votes

C'est une solution tellement propre. git gc' et 'git prune' ne m'ont pas aidé à partir d'autres réponses.

0voto

MAChitgarha Points 867

Cela ne devrait pas affecter tout le monde, mais l'une des raisons semi-cachées de la taille importante du dépôt pourrait être les submodules Git.

Il se peut que vous ayez ajouté un ou plusieurs submodules, mais que vous ayez cessé de les utiliser à un moment donné, et que certains fichiers soient restés dans la section .git/modules répertoire. Pour donner les fichiers de sous-module redondants, voir cette question .

Cependant, tout comme pour le dépôt principal, l'autre moyen est de naviguer vers le répertoire de sous-modules dans .git/modules et faire, par exemple, git gc --aggressive --prune .

Ceux-ci devraient avoir un bon impact sur la taille du dépôt, mais tant que vous utilisez les submodules Git, notamment avec les grandes bibliothèques, la taille de votre dépôt ne devrait pas changer radicalement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X