Git - 如何列出数据库中的所有对象 [英] Git - how to list ALL objects in the database

查看:136
本文介绍了Git - 如何列出数据库中的所有对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有更好的方法来获取存储库中所有对象的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-style sed 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆