2012-08-17 1 views
2

J'ai une prise en pension qui (au début) était 5.6G taille:Git suppression permanente du fichier ne résultant pas en plus petit repo?

[email protected] ~/repo (master) 
$ du -d 0 -h 
5.6G . 

Cependant, cette prise en pension contenait un certain nombre de fichiers binaires volumineux qui ne sont plus nécessaires pour être dans le repo. A l'origine, ils se trouvaient à divers endroits dans la structure du répertoire, mais tous nommés "tc.dat". En tant que « nettoyage » étape, j'ai créé un répertoire cruft et git mv tous dans ce répertoire cochonneries, en changeant leur nom à tc.dat1, tc.dat2, etc.

j'avais alors 5 de ces fichiers, tc.dat1 par tc.dat5

J'ai ensuite suivi this question et utilisé filter-branch avec les étapes de nettoyage pour supprimer toutes les instances de ces fichiers dans le répertoire cruft. Cependant, cela a encore laissé les noms de fichiers d'origine (avant le mouvement dans cruft) dans le repo. Je répète ensuite l'étape de les retirer de leur emplacement d'origine sur tous les commits, et encore une fois fait les étapes de nettoyage:

rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune 

Après tout cela, si je fais un

git log --all -- tc*.dat 

Je ne vois pas les matchs dans mon histoire, m'indiquant qu'ils sont complètement enlevés. Cependant, quand je fais à nouveau un du le repo est toujours de 5,6G. Étant donné que ces fichiers comprennent environ 0,5 Go, je m'attends à voir ce nombre diminuer.

Qu'est-ce qui me manque?

+0

Est-ce que http://stackoverflow.com/questions/2116778/reduce-git-repository-size/2116892#2116892 (et les questions qu'il fait référence) être une aide? – VonC

Répondre

3

Ok, il y avait quelques choses qui me manquaient.

Suivant les conseils à Git pull error: unable to create temporary sha1 filename j'ai essayé quelques-unes des commandes et j'ai fait:

$ git-prune 
$ git-prune-packed 
$ du -h -d 0 
5.2G 

qui est sur le 0,4G vers le bas, ce qui est de la taille des fichiers que je voulais parti. J'ai également remarqué en lisant un few other questions et les pages man pour git-reflog et git-gc que mon utilisation de reflog expire et --aggressive --prune était incorrecte. Les deux prennent des arguments quant à la façon loin dans l'histoire pour aller, et dans les deux cas, je veux toute l'histoire si le paramètre now est nécessaire:

$ rm -rf .git/refs/original/ 
$ git reflog expire --all --expire=now 
$ git gc --aggressive --prune=now 
$ du -h -d 0 
4.5G . 

Une économie plutôt significatives (1.1G) sur ce que j'ai commencé à .

Questions connexes