git - 列出 git 存储库中任何分支中曾经存在的所有文件

标签 git

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

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

谢谢!

最佳答案

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

#!/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 并可能找到您丢失的文件。


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


资源:

相关主题:

关于git - 列出 git 存储库中任何分支中曾经存在的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14442961/

相关文章:

git - 恢复到 merge 分支之前

git - 无法使用git将github项目推送到azure

git - 将什么放入 ~/.gitconfig 来为支持它的每个 git 子命令暗示 --show-signature?

git - 如何使用来自 GitLab 管道的 key 通过 SSH 连接到目标服务器?

windows - 如何在 Windows Git shell 中运行 ./script.sh?

git:比较二进制文件

Git:用链接的工作树交换主工作树?

git - git 是否可以在不推送的情况下创建一个新的空远程分支?

Git, "move"与没有 merge 文件的提交完全相同

eclipse - 如何阻止 Windows 上的 eclipse+git 破坏文件权限?