How to list ALL git objects in the database?
I don’t know since when this option exists but you can
git cat-file --batch-check --batch-all-objects
This gives you, according to the man page,
all objects in the repository and any alternate object stores (not just reachable objects)
(emphasis mine).
Sample output:
$ git cat-file --batch-check --batch-all-objects
64a77169fe44d06b082cbe52478b3539cb333d45 tree 34
6692c9c6e231b1dfd5594dd59b32001b70060f19 commit 237
740481b1d3ce7de99ed26f7db6687f83ee221d67 blob 50
0e5814c4da88c647652df8b1bd91578f7538c65f tag 200
As can be seen above, this yields the object type and it’s size together with each hash but you can easily remove this information, e.g. with
git cat-file --batch-check --batch-all-objects | cut -d' ' -f1
or by giving a custom format to --batch-check
.
Edit: If you don't care about the order you can (since Git 2.19) add the flag --unordered
to speed things up. See VonC's answer for more details.
Try
git rev-list --objects --all
Edit Josh made a good point:
git rev-list --objects -g --no-walk --all
list objects reachable from the ref-logs.
To see all objects in unreachable commits as well:
git rev-list --objects --no-walk \
$(git fsck --unreachable |
grep '^unreachable commit' |
cut -d' ' -f3)
Putting it all together, to really get all objects in the output format of rev-list --objects
, you need something like
{
git rev-list --objects --all
git rev-list --objects -g --no-walk --all
git rev-list --objects --no-walk \
$(git fsck --unreachable |
grep '^unreachable commit' |
cut -d' ' -f3)
} | sort | uniq
To sort the output in slightly more useful way (by path for tree/blobs, commits first) use an additional | sort -k2
which will group all different blobs (revisions) for identical paths.