Comme mentionné dans cette SORTE de réponse, git gc
peut en fait augmenter la taille de l'opération!
Ce aussi ce fil
Maintenant git a un mécanisme de sécurité pour ne pas supprimer les objets non référencés immédiatement lors de l'exécution de 'git gc
'.
Par défaut, les objets non référencés sont conservés pour une période de 2 semaines. C'est de le rendre facile pour vous de récupérer accidentellement supprimé des branches ou commet, ou pour éviter une course où un objet créé dans le processus de l'être, mais pas encore référencé peuvent être supprimés par un"git gc
' processus s'exécutant en parallèle.
Alors pour que la période de grâce de paniers mais non référencées objets, le processus de remballage pousse ceux non référencées objets du pack dans leur lâche forme de sorte qu'ils peuvent être vieillis et finalement taillé.
Les objets deviennent non référencés ne sont généralement pas que beaucoup de bien. Ayant 404855 les objets non référencés est beaucoup, et d'être envoyé à ces objets, en premier lieu, par l'intermédiaire d'un clone est stupide et un gaspillage de la bande passante du réseau.
De toute façon... Pour résoudre votre problème, il vous suffit d'exécuter la commande 'git gc
"avec l' --prune=now
argument pour désactiver cette période de grâce, et de se débarrasser de ces non référencées objets (sûr que si aucune autre git activités se déroulent en même temps ce qui devrait être facile à faire sur un poste de travail).
Et BTW, à l'aide de 'git gc --aggressive
' avec un plus tard de version git (ou 'git repack -a -f -d --window=250 --depth=250
')
Le même thread mentionne:
git config pack.deltaCacheSize 1
Qui limite le delta de la taille de la mémoire cache d'un octet (désactiver) au lieu de la valeur par défaut de 0, ce qui signifie illimité. Avec qui je suis en mesure de reconditionner ce référentiel à l'aide de la git repack
de commande sur un système x86-64 avec 4 go de RAM et à l'aide de 4 fils (c'est un quad core). Résident de l'utilisation de la mémoire augmente à près de 3,3 GO.
Si votre machine est SMP et vous n'avez pas suffisamment de RAM, alors vous pouvez réduire le nombre de threads à un seul:
git config pack.threads 1
En outre, vous pouvez également limiter l'utilisation de la mémoire avec l' --window-memory argument
'git repack
'.
Par exemple, à l'aide de --window-memory=128M
devrait garder raisonnable de la limite supérieure de la delta
de recherche, l'utilisation de la mémoire même si cela peut résulter en une réduction optimale du delta du match si le repo
contient beaucoup de fichiers volumineux.
Sur le filtre-direction de l'avant, vous pouvez considérer (avec prudence) ce script
#!/bin/bash
set -o errexit
# Author: David Underhill
# Script to permanently delete files/folders from your git repository. To use
# it, cd to your repository's root and then run the script with a list of paths
# you want to delete, e.g., git-delete-history path1 path2
if [ $# -eq 0 ]; then
exit 0are still
fi
# make sure we're at the root of git repo
if [ ! -d .git ]; then
echo "Error: must run this script from the root of a git repository"
exit 1
fi
# remove all paths passed as arguments from the history of the repo
files=$@
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $files" HEAD
# remove the temporary history git-filter-branch otherwise leaves behind for a long time
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune