Why does git run auto-packing on every push to our repo?
git
Solution
Git decides whether to auto gc based on two criteria:
- Are there too many packs? (Literally, are there more than 50 files with `.idx` in `.git/objects/pack`?)
- Are there too many loose objects? (Literally, are there more than 27 files in `.git/objects/17`?)
If for some reason Git is not able to merge the pack files or remove the loose objects in that directory, it will think it needs to auto-gc again next time.
I would check the contents of the two directories cited above to see if the (default) criteria are met and see if the criteria change after the re-packing.
Some reasons for failure to complete the process might be:
- some sort of permissions problem
- unreachable objects that are ignored by Git's garbage collection or not pruned by default due to their youth
- insufficient disk space to complete the gc (the repack)
- insufficient memory to complete the gc (the repack)
- objects too large to fit in a specified pack size (see `git config pack.packSizeLimit` which defaults to unlimited but may be overridden by the user)
You should also ensure of course that the gc related tunable parameters haven't been set unreasonably by looking at:
git config -l | grep gc
For some other details, see the Git SCM book on Git Internals.
Problem
The last few days, each and every push to our git repository has caused auto-packing on the server. The output on the client when this happens: ``` ~pdr git:master ❯❯❯ git push origin master Counting objects: 44, done. Delta compression using up to 8 threads. Compressing objects: 100% (26/26), done. Writing objects: 100% (27/27), 4.67 KiB, done. Total 27 (delta 14), reused 0 (delta 0) Auto packing the repository for optimum performance. ``` The packing happens on the server, and ps shows these git commands at work: ``` git 23252 0.0 0.0 68520 552 ? S 15:21 0:00 sshd: git@notty git 23253 0.0 0.0 9660 540 ? Ss 15:21 0:00 git shell -c git-receive-pack 'repositories/pdr.git' git 23254 0.0 0.0 16644 2136 ? S 15:21 0:00 git receive-pack repositories/pdr.git git 23258 0.0 0.0 9660 624 ? S 15:21 0:00 git gc --auto --quiet git 23261 0.0 0.0 9660 504 ? S 15:21 0:00 git repack -d -l -q -A git 23262 0.0 0.0 4104 376 ? S 15:21 0:00 /bin/sh /usr/lib/git-core/git-repack -d -l -q -A git 23275 267 92.2 9569724 3742468 ? Sl 15:21 23:07 git pack-objects --keep-true-parents --honor-pack-keep --non-empty --all --reflog --unpack-unreachable --local -q --delta-base-offset /home/git/repositories/pdr.git/objects/.tmp-23262-pack ``` I have run a manual "git gc" followed by a "git fsck" on the server. No error messages, but on the next push it started auto-packing again. This is on a server running Ubuntu Server 10.04 LTS with Git 1.7.0.4.