修复缺失的树

时间:2012-07-24 20:32:20

标签: git

我的git repo已经损坏,不幸的是它只存在于本地。

$ git fsck --full
Checking object directories: 100% (256/256), done.
broken link from    tree 54b4ff576b2e39831a298e58a38d91890f622b63
              to    tree d564d0bc3dd917926892c55e3706cc116d5b165e
missing tree d564d0bc3dd917926892c55e3706cc116d5b165e

我检查了d564d0bc是什么,它是rails项目中的log/文件夹。此文件夹仅包含*.log个文件(被忽略)和.gitkeep文件。

我尝试按照此post中提到的步骤进行操作,但我正在使用GitHub for Windows,而powershell正在通过空管道尖叫我。

感谢任何帮助。

更新:我将项目复制到linux中,所以我不必担心powershell命令。我仍然没有找到解决方案。

1 个答案:

答案 0 :(得分:2)

如果您确定缺少的树仅包含.gitkeep文件,并且您拥有的内容可能会重新创建缺失的树。

您需要知道的是一堆低级git命令?你准备好了吗?走! 首先是。您需要使用git mktree

此命令从stdin数据读取并根据此信息创建树。它输出新创建的树的sha1汇总(不要忘记以检查它是否等于d564d0bc3dd917926892c55e3706cc116d5b165e)

接下来你需要知道这个输入的格式是什么?! 格式如下

<mode> SP <type> SP <object> TAB <file>

其中SP是空格,TAB是标签。

  • 是文件模式
  • 是一个git对象类型(文件的blob,文件夹的树)
  • 是对象的sha1哈希
  • 是文件名

让我举个例子。 要从此文件夹创建树(some_file文件为空)

drwxrwxr-x 2 aleksandr aleksandr 4096 2012-07-25 03:51 .
drwxrwxr-x 4 aleksandr aleksandr 4096 2012-07-25 03:54 ..
-rw-rw-r-- 1 aleksandr aleksandr    0 2012-07-25 03:51 some_file

你需要运行

echo -e "100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391\tsome_file" | git mktree

但你怎么找到所需的sha1哈希?! git hash-object救援。 刚

git hash-object log/.gitkeep

确定其哈希值。我认为您需要知道修复存储库的所有内容。