2010-11-18 4 views
10

Ich verwende Git, um eine Reihe von Binärdateien zu versionieren. Sie komprimieren ziemlich gut, aber meine zentralen Repos scheinen nicht zu komprimieren, wenn ich zu ihnen drücke. Sie verschlingen einen ordentlichen Teil meiner Quote, also wollte ich nachsehen, ob es eine Möglichkeit gibt, den Remote-Repo zu einem GC zu zwingen.Forcing Remote Repo zu Compress (GC) mit Git

Ist das möglich? Ich arbeite an Project Locker, also glaube ich nicht, dass ich SSH-Zugang habe, um in den Repo selbst zu gehen. Irgendwelche Ideen? Vielen Dank.

+0

Haben Sie Zugriff auf die Gitconfig der Fernbedienung? – Cascabel

Antwort

8

Wenn Sie git gc nicht selbst ausführen können, müssen Sie es in die automatische Ausführung austricksen. Sie werden dann nicht die volle Kontrolle darüber haben, aber Sie sollten zumindest in der Lage sein, es zum Laufen zu bringen.

git gc --auto wird von mehreren Befehlen ausgeführt; der relevante hier ist receive-pack, der auf der Fernbedienung ausgeführt wird, um ein Paket als Teil eines Push zu empfangen. gc --auto repariert nur, wenn genügend lose Objekte vorhanden sind; Der Grenzwert wird durch den Konfigurationsparameter gc.auto und den Standardwert 6700 festgelegt.

Wenn Sie Zugriff auf die gitconfig der Fernbedienung haben, können Sie diesen Grenzwert vorübergehend auf 1 setzen. Es sollte ziemlich sicher mindestens 1 loses Objekt im Repo sein, so dass gc --auto sein Ding beim nächsten Mal tun sollte.

Wenn Sie keinen Zugriff auf die Gitconfig der Fernbedienung haben, kann ich nur daran denken, künstlich eine Reihe loser Objekte zu erstellen. Sie könnten dies tun, indem Sie eine Verzweigung erstellen, eine Reihe winziger Dateien (mit unterschiedlichem Inhalt) an sie übergeben, die Verzweigung an die entfernte Stelle schieben und dann die Verzweigung von der entfernten Stelle löschen. (Wichtig, um den Inhalt zu variieren, oder sie verwenden nur die gleichen Blobs.) Spülen und wiederholen.

+0

Ich kann versuchen, eine kleine App, die 7000 oder so Textdateien pumpt. Ich glaube nicht, dass ich Zugriff auf die Konfiguration habe. Ich werde dich wissen lassen, wie es geht, danke! – jocull

+2

@jocull: 'seq 1 7000 | während n lesen; echo $ n> $ n.txt' – Cascabel

+0

Was ist das, ein Shell-Skript? Wie auch immer, ich habe gerade in Qt etwas schnell gemacht und alle losen Objekte hochgedrückt. Es schien keinen Unterschied in meiner Raumnutzung zu machen. Ich muss nur versuchen, ProjectLocker zu kontaktieren und zu sehen, was los ist. Danke für die Hilfe von allen. – jocull

1

Formular git-gcman page:

Einige git Befehle automatisch git gc ausführen kann; Weitere Informationen finden Sie unter --auto.

Und weiter:

--auto

Mit dieser Option git gc überprüft, ob eine Reinigung ist erforderlich; Wenn nicht, wird es beendet, ohne irgendeine Arbeit auszuführen. Einige Git-Befehle führen git gc --auto aus, nachdem sie Operationen ausgeführt haben, die viele lose Objekte erzeugen könnten.

Die Verwaltung ist erforderlich, wenn zu viele lose Objekte oder zu viele Pakete im Repository vorhanden sind. Wenn die Anzahl loser Objekte den Wert der Konfigurationsvariablen gc.auto überschreitet, werden alle losen Objekte mit git repack -d -l zu einem einzelnen Paket zusammengefasst. Wenn Sie den Wert von gc.auto auf 0 setzen, wird das automatische Packen loser Objekte deaktiviert.

Wenn die Anzahl der Packungen den Wert von gc.autopacklimit überschreitet, dann vorhandenen Packungen (mit Ausnahme der mit einer .keep Datei markiert) werden in ein Paket zusammengefasst, indem Sie die Option -A von git repack verwenden. Wenn Sie gc.autopacklimit auf 0 setzen, wird die automatische Konsolidierung von Paketen deaktiviert.

Und am Ende:

Der Befehl --auto git gc die Pre-Auto-gc Haken laufen. Siehe githooks (5) für weitere Informationen.

2

Das ist wirklich ein Problem, das sie auf ihrem Ende lösen müssen. Sie können es mit einem Post-Receive-Hook oder einem Cron-Job oder etwas Ähnlichem machen, aber wenn sie Ihre Repositories verwalten sollen, ist das aus verschiedenen Gründen ein Teil davon.

+1

Ich stimme zu, obwohl manchmal kann man nicht warten, bis andere Leute ihre Probleme lösen. Es könnte auch sein, dass sie 'gc' anständig laufen lassen, aber die Binärdateien verursachen, dass Dinge schneller aufblähen als gewöhnlich mit Textinhalt. – Cascabel

+0

Wenn sie nicht GC, dann verkaufen sie mir mehr Platz. Es macht für sie fast Sinn, nicht von einem Business-POV abzuhalten. – jocull