2014-01-13 24 views
1

我有一个占用大量磁盘空间的git存储库,所以我正在调查它。鉴于git中树的哈希,我怎么能看到提交了那棵树?

如果我有一棵树的散列,我怎么能看到提交有那棵树的提交?问题中的树形哈希可能是提交的子目录,不一定是提交的“根”树。

+0

请参阅[Git - 从SHA1中找到文件名](http://stackoverflow.com/q/460331/1256452)。虽然这是为blob,那里的剧本很容易适应寻找树木/而不是。 – torek

回答

0

如果您拥有散列的树是顶级树,那么git log --pretty=format:"%H %T" --all | awk -v sha=${SHA} '$2 == sha { print $1 }'会告诉您该树有哪些提交作为提交状态。但是,如果它不是顶级树,则必须基本遍历所有分支上的所有提交,并递归列出每个提交中包含的所有树,以查看它们是否在其中。沿着这些线(未测试):

while read commit 
do 
    git ls-tree -rt ${commit}^{tree} | grep "tree ${SHA}" | sed -e "s/^.*$/${commit}/" 
done < <(git log --pretty=format:"%H" --all)