如何将挂起的Blob与Git中的文件名进行匹配



我还有另一个在没有初始提交的情况下执行git rm -rf的示例。(我意识到我添加了很多无用的文件,并想添加一些过滤器。)

现在,我只剩下23000个没有树的悬挂斑点,但有完整的Git历史!

我将使用脚本在Blob名称上循环(使用git show 'blobname' > 'filename'),但我可以将历史记录中的这些文件名与Blob相关联吗?

对于所有曾经/将要犯我所犯错误的人,故事到此结束。

首先,简要总结一下我所做的事情。

  1. 创建了一个空存储库
  2. 移动了许多文件/目录
  3. gid add .
  4. 意识到我只是添加了一吨无用/不那么重要/冗余的文件
  5. git rm -rf,目的是在.gitignore中添加一些过滤器
  6. 意识到我所有的文件都不见了

我尝试了各种数据恢复工具;没有运气。我能做的最好的事情就是下面的程序。

  1. 立即将工作目录复制到其他卷(外部HD)
  2. git fsck --lost-found可能与--unreachable --cache一起
    这将创建包含所有(大部分?)的文件夹.git/lost-found/other原始文件被重新创建,但没有文件名。现在的问题是如何恢复文件名。不幸的是,我恢复的所有文件都是Blob,没有根,所以我没有关于目录树结构的信息
  3. 尽管我有丢失文件名的完整列表(只有名称,没有大小),但我找不到任何根,所以这些信息基本上是无用的
  4. 通常,可以编写一个使用file查看文件类型(file <filename>)的脚本,并为其附加相应的扩展名。文件名与文件名匹配的问题仍然存在
    或者,可以使用暴力。例如,为了恢复pdf,我按长度对恢复的文件进行了排序,并为其附加了.pdf扩展名,然后逐一查看。实际的pdf文件显示了一些东西,而其他文件则没有
  5. 为了恢复基于文本的文件(txt,tex,c,h..),我使用了grep,寻找一个我记得属于特定(组)文件的字符串
  6. 现在,我保留了包含所有丢失的恢复文件的目录,每次我需要其中一个文件时,我都会使用子弹头4的一个小变体

祝你好运!

相关内容

  • 没有找到相关文章

最新更新