我的Git回购已经腐化了,不幸的是它只存在于本地。
$ 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
文件。我试着按照本文中提到的步骤操作,但我使用的是github for windows,powershell在一个空管道上向我尖叫。
如有任何帮助,我们将不胜感激。
更新:我将项目复制到linux中,这样就不必担心powershell命令了。不过,我还是没有找到解决办法。
最佳答案
如果您确定丢失的树只包含.gitkeep文件,并且您拥有它的内容,则无法重新创建丢失的树。
你只需要知道一堆低级的git命令?你准备好了吗?快走!
首先。您需要使用git mktree
。
此命令从stdin数据读取并基于此信息创建树。它输出新创建树的sha1总和(不要忘记检查它是否等于d564d0bc3dd917926892c55e3706cc116d5b165e)
接下来你需要知道这个输入的格式是什么?啊!
格式如下
<mode> SP <type> SP <object> TAB <file>
其中sp是一个空格,tab是一个tab。
是文件模式
是git对象类型(blob表示文件,tree表示文件夹)
是对象的sha1散列
是一个文件名
让我举个例子。
从该文件夹创建树(some_文件为空)
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 log/.gitkeep
以确定其哈希值。我想你需要知道的就是修复你的仓库。