我的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命令。我仍然没有找到解决方案。
答案 0 :(得分:2)
如果您确定缺少的树仅包含.gitkeep文件,并且您拥有的内容可能会重新创建缺失的树。
您需要知道的是一堆低级git命令?你准备好了吗?走!
首先是。您需要使用git mktree
。
此命令从stdin数据读取并根据此信息创建树。它输出新创建的树的sha1汇总(不要忘记以检查它是否等于d564d0bc3dd917926892c55e3706cc116d5b165e)
接下来你需要知道这个输入的格式是什么?! 格式如下
<mode> SP <type> SP <object> TAB <file>
其中SP是空格,TAB是标签。
让我举个例子。 要从此文件夹创建树(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
确定其哈希值。我认为您需要知道修复存储库的所有内容。