Is there a better way of getting a raw list of SHA1s for ALL objects in a repository than:
ls .git/objects/??/\*
and
cat .git/objects/pack/*.idx | git show-index
I know about git rev-list --all
but that only lists commit objects that are referenced by .git/refs
, and I'm looking for everything, including unreferenced objects that are created by git-hash-object
, git-mktree
etc.
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.