首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复缺少对象的git存储库?

如何修复缺少对象的git存储库?
EN

Stack Overflow用户
提问于 2011-12-01 20:24:57
回答 3查看 15.6K关注 0票数 14

我的开发存储库在某个时候丢失了一个对象。

代码语言:javascript
复制
$ git fsck
fatal: failed to read object 2dddc84156fa30e4614a7ea5a1895885011b8db8: Invalid argument
$ git cat-file -t 2dddc84156fa30e4614a7ea5a1895885011b8db8
error: unable to find 2dddc84156fa30e4614a7ea5a1895885011b8db8
fatal: git cat-file 2dddc84156fa30e4614a7ea5a1895885011b8db8: bad file

一个新克隆的存储库拥有这个对象。

代码语言:javascript
复制
$ git cat-file -t 2dddc84156fa30e4614a7ea5a1895885011b8db8
tree

我想保留我的开发存储库,它有未推的分支和存储库。

如何将该对象修补到已损坏的存储库中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-01 20:35:23

您可以尝试的是从新克隆的存储库中获取文件.git/objects/2d/ddc84156fa30e4614a7ea5a1895885011b8db8并将其复制到您的开发回购程序中.

票数 8
EN

Stack Overflow用户

发布于 2015-03-07 04:59:56

最近,我在一个本地存储库和一个未损坏的引用存储库中找到了一堆丢失的对象来恢复它。这就是我想出的对我有用的魔法:

代码语言:javascript
复制
cd <path-to-local-repo>
git unpack-objects < <reference-repo-path>/objects/pack/pack-<hash>.pack

事实证明,我需要的所有对象都在引用存储库中的一个包文件中,而不是在单独的“松散”对象文件中。这个简单的咒语可以将文件打包到本地数据库中,填补漏洞。做完后

代码语言:javascript
复制
git gc

清理任何悬空的犯(即因重订、修订提交等)我的git fsck现在是干净的。

票数 11
EN

Stack Overflow用户

发布于 2011-12-01 20:54:29

基本上可以归结为:您在任何地方都有(.git/objects/2d/ddc84156fa30e4614a7ea5a1895885011b8db8)文件的备份吗?如果你能找到它,把它复制回你的git存储库,一切都会好起来的。换句话说,您知道存储库是否已经被克隆了吗?如果有,您将在克隆人的git文件夹中找到该文件并将其复制到您的文件夹中。如果您还没有克隆存储库,那么您是否将其压缩到某个地方?如果你在mac电脑上,你检查过时间机器了吗?如果您不在mac上,那么您是在使用什么来备份代码吗?

基本上可以归结为:您需要备份该文件。Git的设计使得当发生这种情况时,只需使用备份(它是存储库的一个克隆)来恢复文件。尽管如此,文件名是基于SHA1哈希的,因此如果您可以在其他任何人的存储库中找到该文件名,则很有可能您可以在自己的:)中使用该文件名:)

通常很好的做法是,总是将存储库复制到另一个位置,以便在发生类似情况时能够安全地保存。这也是为什么像github和bitbucket这样的服务如此流行的原因。

您可能还想看看这个问题:How to recover Git objects damaged by hard disk failure?

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8347796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档