6

我有一些我正在寻找的文件,但我不知道它们在我的 git 存储库中的位置(空间和时间)。我还推测文件和它们所在的分支都可能被删除。

我如何列出整个git 存储库中曾经存在的每个文件?我知道删除的文件/分支很可能已经被垃圾收集了,好吧,除了祈祷它还没有发生之外,别无他法。

谢谢!

4

1 回答 1

3

这有点疯狂,但它可能会做你想做的事:

#!/bin/sh

content="$@"

for hash in $({
    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)
    git fsck --unreachable | grep "^unreachable blob" | cut -d' ' -f3
} 2> /dev/null | cut -d' ' -f1 | sort | uniq); do
    if git cat-file blob $hash 2> /dev/null | grep -i $content > /dev/null ; then
        echo $hash
    fi
done

我试图让每个 blob 都可以访问,并在每个 blob 中寻找特定的内容。

您将能够git cat-file -p hash对每个生成的散列执行 a 并可能找到丢失的文件。


在旁注中,我很惊讶没有看到任何好的方法来绝对列出存储库中可用的每个对象。我正在考虑打开所有东西并从那里开始,这也可能是一个更好的解决方案。


资源:

相关话题:

于 2013-01-21T17:43:45.367 回答