【问题标题】:Recovering Git repository from objects only仅从对象中恢复 Git 存储库
【发布时间】:2011-08-11 16:12:12
【问题描述】:

我有一个 Windows 盒子,它已将其删除大部分 Git 存储库(必须触发重要工作检测器;)。我剩下的(我能找到的)就是对象。我也不确定对象的集合有多完整。是否可以仅从对象中恢复事物?据我所知,对象树是完整的。所有的包装和松散的物品都已到位;我只是没有说服 Git 的元数据。

【问题讨论】:

  • 你所说的只是对象是什么意思?
  • 从字面上看,这是我的回购。 ls repo.git 只给出“对象”。
  • 这个命令显示了什么git show -s
  • fatal: Not a git repository.
  • 看来 git 不适合你。生病看看是否有办法解码 blob。

标签: git data-recovery disaster-recovery


【解决方案1】:

我会尝试的第一件事是使用git init 初始化一个新的存储库。然后我将对象目录从死存储库复制到新存储库。然后我会在新的存储库中运行git fsck

运气好的话,你会看到很多悬空对象,运气好的话,一些悬空对象将是提交对象,它们将成为丢失分支的尖端。

如果您在这些提交上运行 git show 和/或 git log,您可能能够识别出一些分支。

要“恢复”它们,您可以使用 git branch 重新创建命名分支。

【讨论】:

  • 太棒了!我有一个坏的 SHA-1 文件,我需要弄清楚如何重命名(Witless 将其重命名为 e,这没有帮助),我需要重新连接我的 HEAD,但效果很好。干杯,查尔斯!
  • 我不确定如何找到提交的原始名称,但重新附加 HEAD 就像 git checkout <last-commit-hash> 然后创建一个 master 分支一样简单。现在,我需要找出00/e 应该是什么。
  • @Jashank:如果松散对象有效,您还可以“欺骗”Git 从(可能)不相关的松散对象路径名中读取它(SO5585388 中演示的“损坏”),然后写入它走向正确的道路。 bash -c 'i=1; while n=$(printf %040x $i) && git cat-file -s "$n" >/dev/null 2>&1; do let i++; done; p=$(printf .git/objects/%.2s/%s "$n" "${n#??}"); echo "using temp object name $n at $p"; set -x; cp -p "$1" "$p" && t=$(git cat-file -t "$n") && git cat-file "$t" "$n" | git hash-object --stdin -t "$t" -w && rm -f "$p"' - .git/objects/00/e
  • @Chris - 这只是......哇。这就是我见过的最好的扭曲 Bash。我确实设法恢复了文件:Git 报告了一个从结帐中删除的文件,所以我去寻找,找到了该文件并将其移入。
【解决方案2】:

如果您还没有尝试过git checkout master,我会从它开始。

【讨论】:

  • 找不到 Git 存储库。 “致命:不是 git 存储库(或任何可以挂载 parent 的父级)。在文件系统边界停止(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM)。”
【解决方案3】:

尝试使用这篇文章

How to recover Git objects damaged by hard disk failure?

该答案可能包含一些 *nix 相关信息。如果有帮助,请告诉我。

我看看它的作用。

【讨论】:

  • 看起来前几个命令可能会有所帮助。它向您展示了如何从对象中解压缩 pack 文件夹
  • 是的,我会试一试。我现在需要初始化一个新的 Git 存储库吗?
  • 可能不会。我建议备份你所拥有的,这样你就不会再丢失了。我得先跑了。等我回来再签到。
  • 我认为这不是最佳方法。没有证据表明物品已损坏,因此不需要拆包和回收物品。将对象(打包或松散)恢复到工作的 git 存储库并从那里开始应该就足够了。
  • 如果你有如何做到这一点的例子,我会更愿意把它们放出来
猜你喜欢
  • 1970-01-01
  • 2020-05-28
  • 2012-04-06
  • 1970-01-01
  • 2018-04-16
  • 2013-08-24
  • 1970-01-01
  • 2011-04-06
  • 2010-12-05
相关资源
最近更新 更多