2014 年 1 月 30 日
关注 @kylefuller注意:如果您在运行 gem update
后遇到此问题,跳转此处 查找解决方案。
不幸的是,我们在 libgit2 中遇到了一个错误,我们将不得不强制推送到 Specs 存储库。(也称为“主”spec 存储库。)
这对您意味着什么?
基本上,您的 CocoaPods 设置将中断。您将不得不手动删除 Specs 存储库的任何本地副本,并重新克隆 Specs 存储库的新版本。您可以使用以下命令执行此操作
$ sudo rm -fr ~/.cocoapods/repos/master
$ pod setup
注意 1:如果您对 Specs 存储库有任何未合并的本地提交或更改,您应确保拥有它们的副本。我建议您手动复制这些更改并重新提交它们。您可以修复您的存储库而不删除,但是,这不是一个简单的过程,因此我们建议您删除 Specs 存储库及其任何分支的副本。
注意 2:如果您将私有 podspec 存储在 Specs 存储库的克隆中,或者您有一个从 Specs 存储库分叉出来的私有 spec 存储库,这是通过使用私有 spec 存储库 以正确的方式 清理它的绝佳时机。这样,您的私有 spec 存储库将永远不会受到其他 spec 存储库中的问题的影响。
如果您真的知道自己在做什么,并且不想重新下载完整的存储库,请按照 这些 说明进行操作。
为什么会出现此中断?
不幸的是,Specs 存储库因 libgit2 中的一个错误 而损坏,该错误为 GitHub 的 Web 编辑器 提供支持。这 导致我们的 git 存储库损坏
正如 fsck 所述,它有重复的条目,这违反了 Git 的对象格式。GitHub 在将对象推送到每个分支时检查对象;任何在损坏的树上构建的人都会被拒绝推送,因为他们试图将损坏的对象带入他们的分支(因为可以从他们的新提交中访问它)。
我们正在调查这个损坏的对象最初是如何进入存储库的。目前看来它是一个网络编辑 […], 然后通过拉取请求合并到网站上 ([…] 看起来这是 GitHub 中的错误,而不是任何类型的用户错误)。我们正在研究修复错误,同时也在研究如何更好地保护损坏的对象进入存储库(即,这正是 fsck-on-push 检查要防止的问题,但它们目前不扩展到网络编辑)。
唯一的解决方案是重写存储库的历史并强制推送重写的树。推出此修复程序基本上意味着必须重置存储库的所有副本。这可能是一个微妙的过程,因此删除并重新克隆是最安全、最简单的方法。
这还会再次发生吗?
有一个 修复程序 正在修复 libgit2 中的错误。这修复了一个错误,该错误会阻止 libgit2 在这种特定情况下破坏存储库。
GitHub 还致力于在网络编辑器中实施检查措施,以便无法保存损坏的存储库,并防止将来出现任何类似问题。(就像使用 git-push 时的情况一样,它会在 GitHub 端运行 git-fsck。)
致谢
我们谨向以下人员表示衷心的感谢,感谢他们在调查和解决此问题方面提供的帮助。CocoaPods 总部的所有人都非常感谢,这展示了一个(更大的)社区人员齐心协力的力量。
我们非常抱歉,这个问题占用我们伟大的早期采用者和 pod 提供商的所有时间。在我们努力实现 CocoaPods 及其架构的平稳运行的版本 1 的过程中,非常感谢你们的耐心和理解。
更新我的 gem 后我被链接到这里,该怎么办?
此问题被追踪到 Psych 中的一个问题。要修复它,请使用以下命令
rm -fr ~/Library/Caches/CocoaPods && \
gem update --system && \
gem update && \
gem cleanup && \
pod setup
现在,您将看到以下内容,而不是看到此内容
Setting up CocoaPods master repo
Already up-to-date.
[!] There was an error reading '/Users/xxxxx/.cocoapods/repos/master/CocoaPods-version.yml'.
Please consult https://blog.cocoapods.org.cn/Repairing-Our-Broken-Specs-Repository/ for more information.
您将看到此内容
Setting up CocoaPods master repo
Setup completed
<3