2010-11-18 8 views
10

J'utilise Git pour la version d'une série de fichiers binaires. Ils se compressent assez bien, mais mes repos centraux ne semblent pas se comprimer quand je les pousse. Ils mangent une quantité décente de mon quota, alors je cherchais à voir s'il y avait un moyen de forcer le repo distant à faire un GC.Forcer Remote Repo à compresser (GC) avec Git

Est-ce possible? Je travaille sur Project Locker donc je ne crois pas que j'ai l'accès SSH pour entrer et GC le repo moi-même. Des idées? Merci.

+0

Avez-vous accès au gitconfig de la télécommande? – Cascabel

Répondre

8

Si vous ne pouvez pas exécuter git gc vous-même, vous allez devoir le faire fonctionner automatiquement. Vous n'aurez pas un tel contrôle total à ce moment-là, mais vous devriez au moins pouvoir le faire fonctionner.

git gc --auto est exécuté par plusieurs commandes; celui qui est pertinent ici est receive-pack, qui est exécuté sur la télécommande pour recevoir un pack dans le cadre d'un push. gc --auto ne se remballe que lorsqu'il y a suffisamment d'objets libres; la valeur de coupure est déterminée par le paramètre de configuration gc.auto et par défaut égale à 6700.

Si vous avez accès au gitconfig de la télécommande, vous pouvez définir cette coupure à 1 temporairement. Il devrait certainement y avoir au moins un objet libre dans le repo, ce qui devrait faire que sa prochaine action soit la prochaine fois que vous le pousserez.

Si vous n'avez pas accès au gitconfig de la télécommande, tout ce que je peux penser est de créer artificiellement un tas d'objets libres. Vous pouvez le faire en créant une branche, en y transférant un tas de petits fichiers (avec un contenu différent), en poussant la branche vers la télécommande, puis en supprimant la branche de la télécommande. (Important de varier le contenu, ou ils vont simplement utiliser les mêmes blobs.) Rincez et répétez.

+0

Je peux essayer de faire une petite application qui pompe environ 7000 fichiers texte. Je ne crois pas avoir accès à la config. Je vais vous laisser savoir comment ça se passe, merci! – jocull

+2

@jocull: 'seq 1 7000 | tout en lisant n; echo $ n> $ n.txt' – Cascabel

+0

Qu'est-ce que c'est, un script shell? De toute façon, je viens de faire quelque chose de très rapide en Qt et de pousser tous les objets en vrac. Cela n'a pas semblé faire une différence dans mon utilisation de l'espace. Je vais juste devoir essayer de contacter ProjectLocker et voir ce qui se passe. Merci pour l'aide de tout le monde. – jocull

1

Form git-gcman page:

Certaines commandes git peuvent exécuter automatiquement git gc; voir le drapeau --auto ci-dessous pour plus de détails.

Et plus loin:

--auto

Avec cette option, vérifie git gc si un ménage est nécessaire; sinon, il quitte sans effectuer de travail. Certaines commandes git git gc -auto après avoir effectué des opérations qui pourraient créer de nombreux objets.

Un service d'entretien est requis s'il y a trop d'objets volumineux ou trop de paquets dans le référentiel. Si le nombre d'objets détachés dépasse la valeur de la variable de configuration gc.auto, tous les objets détachés sont combinés en un seul paquet à l'aide de git repack -d -l. La définition de la valeur de gc.auto sur 0 désactive l'empaquetage automatique des objets détachés.

Si le nombre de packs dépasse la valeur de gc.autopacklimit, les packs existants (à l'exception de ceux marqués d'un fichier .keep) sont regroupés dans un pack unique en utilisant l'option -A de git repack. Définir gc.autopacklimit sur 0 désactive la consolidation automatique des packs.

Et à la fin:

commandement du git gc courra le crochet pré-auto-gc. Voir githooks (5) pour plus d'informations.

2

C'est vraiment un problème qu'ils doivent résoudre de leur côté. Ils peuvent le faire avec un crochet post-réception ou un travail cron ou quelque chose de similaire, mais s'ils sont supposés maintenir vos dépôts, cela en fait partie pour de nombreuses raisons.

+1

J'ai tendance à être d'accord, bien que parfois vous ne pouvez pas attendre que d'autres personnes résolvent leurs problèmes. Il se peut aussi qu'ils exécutent gc' une quantité décente, mais les fichiers binaires font gonfler les choses plus vite que d'habitude avec du contenu textuel. – Cascabel

+0

S'ils ne font pas GC alors ils me vendent plus d'espace. Il est presque logique pour eux de ne pas partir d'un POV d'affaires. – jocull