git - 通过 Google Drive 从 MacOS 迁移到 Ubuntu 后,Git 存储库损坏
问题描述
我有一个在单台 MacOS 计算机上开发的小项目。不幸的是,这台电脑被盗了,我从 Google Drive 上的云备份中恢复了它。我知道这不是最佳实践,但考虑到组织限制,这是当时唯一的选择。
在 Ubuntu 计算机上打开备份存储库有以下问题:
大部分最新提交都丢失了。(最新签出的文件还在文件夹中,所以工作损失很小)。
大多数 git 命令(
git log
,git status
等)都可以使用,但会显示以下错误:error: unable to open object pack directory: .git/objects/pack: Not a directory
.
.git/objects/pack 实际上似乎是一个空文件。
这可能是什么原因造成的,可以修复吗?
解决方案
大多数云备份服务都有一些系统服务,可以在数据更改或定期运行和上传数据。但是,这些系统旨在上传单个文件,而不是代表原子快照的多个文件,例如 Git 存储库或数据库,并且它们不提供 POSIX 文件系统保证。因此,使用云备份服务来存储存储库很可能会损坏您的存储库。
如果您在 Git 托管服务(如 GitHub)上有一个存储库,请尝试使用它。如果不这样做,您可以尝试删除.git/objects/pack
文件并运行git init
. 这将用适当的目录替换它,然后您可以尝试进一步恢复,包括运行git fsck
. 悬空物体通常是可以的,但其他物品可能表明存在问题。
如果将来您需要将存储库备份到云备份服务,请创建整个存储库的 tarball 并上传。这将保证您拥有可以在将来恢复的一致快照。
推荐阅读
- flutter - 如何从路由获取参数到其他屏幕?
- ruby-on-rails - 使用 Amazon S3 的 Active Storage 不使用指定的文件名保存,而是使用文件密钥代替
- javascript - Kendo mvc 刷新单元格值
- azure - Azure 表存储:如何在导出/导入期间保存 Unicode 符号?
- javascript - ArcGIS API for Javascript:FeatureLayerCollection 未显示所有要素
- python - 迭代张量作为数组 Tensorflow
- c++ - OpenMP 仅使用一个线程
- python - 当数据为每组的行而不是每组一行时,如何将数据集拆分/分区为训练和测试集
- java - 在Linux下,Java使用Rxtx串口出现异常,但Windows是可以的
- broadcast - Android O 上的隐式广播接收器