我正在接手一个项目,但是没有正规的git repo,而是一个pack-7dab97d983eeb36321c680bee7fde43688334f52.pack文件。我能从中恢复一个可用的git repository吗?如何操作?
我正在接手一个项目,但是没有正规的git repo,而是一个pack-7dab97d983eeb36321c680bee7fde43688334f52.pack文件。我能从中恢复一个可用的git repository吗?如何操作?
打包文件仅包含提交记录,因此您没有分支名称,您需要猜测它们。一个好的起点是悬空提交。
git fsck --lost-found
请注意,如果打包文件只是原始仓库中的几个文件之一,则会失败,因为它可能依赖于您没有的对象。
git branch somebranchname SHA1_OF_dangling_commit
。 - MR.GEWA你可能会有两个问题:
答案对于问题1是不行。
答案对于问题2是也许可以,甚至很可能可以,只要它不是“瘦”包。
max630的回答提供了一种实现答案2的方法,并解释了为什么无法实现答案1:一个仓库基本上由两个数据库组成。其中之一是名称到哈希ID的数据库。您完全缺少这个数据库:您没有名称。
另一个数据库包含对象:提交和支持对象。你确实有其中一些。
具体来说,pack文件是对象的集合。一个仓库可能使用多个pack文件,并且/或者可能包含loose(未打包)的对象。因此,拥有pack文件并不能保证您拥有与该仓库相关的所有对象:您可能只拥有其中的一些对象。