首页 > 解决方案 > 通过 Google Drive 从 MacOS 迁移到 Ubuntu 后,Git 存储库损坏

问题描述

我有一个在单台 MacOS 计算机上开发的小项目。不幸的是,这台电脑被盗了,我从 Google Drive 上的云备份中恢复了它。我知道这不是最佳实践,但考虑到组织限制,这是当时唯一的选择。

在 Ubuntu 计算机上打开备份存储库有以下问题:

  1. 大部分最新提交都丢失了。(最新签出的文件还在文件夹中,所以工作损失很小)。

  2. 大多数 git 命令(git log,git status等)都可以使用,但会显示以下错误:error: unable to open object pack directory: .git/objects/pack: Not a directory.

.git/objects/pack 实际上似乎是一个空文件。

这可能是什么原因造成的,可以修复吗?

标签: git

解决方案


大多数云备份服务都有一些系统服务,可以在数据更改或定期运行和上传数据。但是,这些系统旨在上传单个文件,而不是代表原子快照的多个文件,例如 Git 存储库或数据库,并且它们不提供 POSIX 文件系统保证。因此,使用云备份服务来存储存储库很可能会损坏您的存储库。

如果您在 Git 托管服务(如 GitHub)上有一个存储库,请尝试使用它。如果不这样做,您可以尝试删除.git/objects/pack文件并运行git init. 这将用适当的目录替换它,然后您可以尝试进一步恢复,包括运行git fsck. 悬空物体通常是可以的,但其他物品可能表明存在问题。

如果将来您需要将存储库备份到云备份服务,请创建整个存储库的 tarball 并上传。这将保证您拥有可以在将来恢复的一致快照。


推荐阅读