Git - 如何列出数据库中的所有对象 [英] Git - how to list ALL objects in the database
问题描述
有没有更好的方法来获取存储库中所有对象的SHA1的原始列表,而不是执行 ls .git / objects / ?? / \ *
和 cat .git / objects / pack / *。idx | git show-index
?
我知道 git rev-list --all
但只列出了由.git / refs引用的提交对象,并且我正在寻找包含由git-hash-object,git-mktree等创建的未引用对象的 everything。。 >
Mark's答案适用于我,经过一些修改后:
- 使用
- git-dir
而不是- show-cdup
以支持裸回购 - 没有包装时避免出错
- 使用
perl
是因为OS X Mountain Lion的BSD风格sed
不支持-r
#!/ bin / sh
set -e
cd$(git rev-pars e --git-dir)
#查找包中的所有对象:
查找对象/ pack -name'pack - *。idx'|同时阅读p;做
git show-index< $ p | cut -f 2 -d''
完成
#现在找到所有松散对象:
查找对象/ \
| egrep'[0-9a-f] {38}'\
| grep -v / pack /
| perl -pe's:^。*([0-9a-f] [0-9a-f])/([0-9a-f] {38}):\1\2:'\
;
Is there a better way of getting a raw list of SHA1s for ALL objects in a repository than doing 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.
Edit: Aristotle posted an even better answer, which should be marked as correct.
Mark's answer worked for me, after a few modifications:
- Used
--git-dir
instead of--show-cdup
to support bare repos - Avoided error when there are no packs
- Used
perl
because OS X Mountain Lion's BSD-stylesed
doesn't support-r
#!/bin/sh
set -e
cd "$(git rev-parse --git-dir)"
# Find all the objects that are in packs:
find objects/pack -name 'pack-*.idx' | while read p ; do
git show-index < $p | cut -f 2 -d ' '
done
# And now find all loose objects:
find objects/ \
| egrep '[0-9a-f]{38}' \
| grep -v /pack/
| perl -pe 's:^.*([0-9a-f][0-9a-f])/([0-9a-f]{38}):\1\2:' \
;
这篇关于Git - 如何列出数据库中的所有对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!