Warum sagt mir Git immer wieder, dass das Repository automatisch im Hintergrund gepackt wird, um eine optimale Leistung zu erzielen?

99

Hinweis : Ich denke nicht, dass dies ein Duplikat dieser Frage ist , bei der es sich um ein Nicht-Hintergrund-Paket handelt, bei dem Git mit einer subtil anderen Fehlermeldung hängt .


In einem meiner Git-Repositories git fetchdruckt Git jedes Mal, wenn ich (zum Beispiel) aufrufe:

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.

Es scheint dies jedes Mal zu drucken, wenn ich es git fetchwiederholt mache , auch wenn es keine Änderungen gibt und nichts git fetchzu tun ist. Das macht für mich nicht viel Sinn. Dies scheint auch bei anderen Netzwerkoperationen wie git pushund der Fall zu sein git pull.

Der Befehl kehrt ohne weitere Ausgabe sofort zur Eingabeaufforderung zurück, und ich kann keinen Git-Prozess finden, der auf meinem Computer ausgeführt wird. Dies scheint nur mit diesem Repository und nur auf diesem Computer zu geschehen. git config -l | grep gcgibt nichts zurück.

Was kann ich tun, um dieses Problem zu diagnostizieren oder zu beheben?

$ git --version 
git version 2.0.1

Ich benutze OS X 10.9.

Andrew Ferrier
quelle
Es sieht aus wie das gleiche Problem wie die Frage, die Sie verlinkt haben, aber es passiert gerade schnell genug, um nicht zu hängen.
Holloway
Auch möglicherweise verwandt
Holloway
Trengot, das glaube ich nicht. Die Fehlermeldung ist subtil anders - sie erwähnt "den Hintergrund".
Andrew Ferrier
Trengot, sorry, du hattest Recht, es war verwandt (der zweite Link). Vielen Dank für den Hinweis, siehe meine Antwort unten für Details.
Andrew Ferrier

Antworten:

166

Ich habe die Lösung aus dem zweiten Kommentar gefunden, den Sie gemacht haben, Trengot, danke. Es stellt sich heraus, dass ich einige baumelnde Blobs hatte, die sich darin befanden .git/objects/17und somit das Packen auslösten:

$ git fsck
dangling blob d9ff0aeac4aa8b4e0907daed675ebf60278bc977
dangling blob dbff2d073741f9775c815d4a3c623736af224dad
dangling blob e1ffbab1c5b985cd1cd3bc0281075ea2ed80744a
dangling blob fdff59878ccb3a75689f4acca615cfb635288774

Dies räumte sie auf:

$ git gc --prune=now

Beachten Sie, dass dies laut Henriks Kommentar etwas gefährlich sein kann. Pass auf!

Andrew Ferrier
quelle
19
Vielen Dank! Das schien für mich zu funktionieren. Seien Sie sich bewusst, dass dies --prune=nowein bisschen gefährlich ist. Standardmäßig --prunebleiben 2 Wochen lang baumelnde Blobs erhalten. Wenn Sie also vor 5 Minuten versehentlich eine falsche Rebase durchgeführt oder gestern einen Zweig entfernt haben, können Sie sich erholen. Sobald Sie diesen Befehl ausführen, verlieren Sie bis jetzt alle baumelnden Blogs - nicht vor 2 Wochen. Auch es scheint , wie Sie es noch nie laufen sollten , während andere Git Befehle in einem anderen Endgerät durchgeführt werden oder Ihre Repo können beschädigt werden.
Henrik N
3
Du hast meinen Tag gerettet
Owen Chen