28

我正在使用 cocoapods 开展一个项目,突然间我看到自己在其中一个库中进行了一些更改。如何确保这些更改永远不会被 a 覆盖pod update?有什么方法可以在不更新 github 项目的情况下在 pod 中引入更改?

更新:分叉一个项目

我试图分叉项目并创建一个新的规范文件以指向新项目。我能够安装基本的东西,但是,由于某种原因,安装了一些依赖项,但无法在 pods 项目中引用。目前我的 podsfile 中有这个:

'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'

该库的分支位于https://github.com/tiagoalmeida/WhirlyGlobe

UPDATE2:缺少标题

我发现没有生成用于 boost 和 Eigen 的标头(Pods/Headers)(来自 WhirilyGlobe)。

UPDATE3:尝试对标头做一些事情

我尝试查看此线程中的一些配置,并尝试了常见问题解答中的解决方案,但我相信我的问题有所不同。标题实际上丢失了。

UPDATE4:攻击 cocoapods 版本

我已经卸载了 cocoapods 并安装了 0.20.2 版本(在尝试使用我的 fork 之前正在工作)并且它保持不变:/。

4

6 回答 6

10

@pgb 和 wattson 为我提供了很好的信息,但最终问题出在多方面。

我不知道为什么,但似乎 cocoapods 0.22 处理标题的方式不同。我卸载了 cocoapods 并安装了 0.20.2 版本。

为了检查我使用的 cocoapods 的版本,gem query我已经删除了 cocoapodsgem uninstall cocoapods并安装了 cocoapods gem install cocoapods --version 0.20.2

我已经像这样使用了我的 podfile:

'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'

podspec 指向我的新 podspec。我这样做是因为我需要从原始 podfile 中删除 :tag(否则它总是指向同一个位置),这样我可以更好地控制文件。

在 podspec 我改变了来源:

s.source = { :git => "https://github.com/tiagoalmeida/WhirlyGlobe.git"} 

指向我的叉子并删除标签。

感谢@pgb 和@wattson 尝试帮助我。两者都赞成,因为它们都很有用。

于 2013-07-08T11:18:53.367 回答
5

您可以分叉存储库,然后将分叉的存储库添加为 pod,因此假设您已将存储库分叉为https://github.com/tiago/ThePodProject.git,然后将 pod 设置为:

pod 'ThePodProject', :git => 'https://github.com/tiago/ThePodProject.git'

有关更多详细信息,请参见此处(在“来自库 repo 根目录中的 podspec”下)

于 2013-07-04T14:39:35.940 回答
1

您即将让它与您的分叉存储库一起使用。

我刚刚尝试了以下内容Podfile

pod 'WhirlyGlobe', :git => 'https://github.com/tiagoalmeida/WhirlyGlobe'

它下载WhirlyGlobe然后失败,因为hg丢失了。我只是使用Homebrew安装它:brew install mercurial然后 runnningpod install能够安装所有依赖项。

该项目编译,但我不确定它是否有效,继续尝试。

shapelib请注意,下载和编译所有依赖项(尤其是)需要很长时间。

于 2013-07-04T21:33:45.373 回答
0

只是想在答案中加上我的几分钱。我遇到同样的问题。正如上面有人建议的那样,我对 pod lib 进行了子类化。我使用的是ACEDrawingView,它具有只读的属性图像。我对它进行了子类化并使这个属性读/写。我个人觉得通过子类更优雅,更轻松地解决这类问题。除非您想在主要项目方面进行大规模开发。

于 2015-03-16T17:23:13.940 回答
0

仅使用 Git 保存自定义更改(无分叉)

对于那些寻找简单解决方案的人,我已经通过使用 git stashes 成功解决了这个问题。

如前所述,pod update将覆盖您所做的任何更改。但是,如果您使用 git,我喜欢做的是提交我的所有更改,除了我的 pod 更改。

一旦我对分支的唯一更改是 Pod 更改,我会通过运行git stash save "Custom Cocoapod changes, apply after every pod update". 您可以通过更改“”之间的文本来给它任何您想要的消息。

此命令具有将您的工作目录重置为以前的 HEAD 的副作用,因此如果您想重新应用这些存储,您可以运行git stash apply以重新获取这些更改,然后您可以提交它们以保存它们。

不要使用git stash pop,因为这会在应用后删除存储。

现在,在未来某个未确定的时间,当您更新 pod 并再次应用存储时,您要做的是 run git stash list。这将返回您所做的所有存储的列表,其中最近的索引为零。你可能会看到这样的东西:

stash@{0}: On featureFooBar: foo bar
stash@{1}: On Master: Custom Cocoapod changes, apply after every pod update
...

如果自定义 cocoa pods 更改 stash 在 stash@{0} 中那么完美,您可以git stash apply再次运行 a ,您将在工作目录中获得这些更改。否则,一旦您找到您的 pod 更改的存储编号,您可以通过运行应用该存储git stash apply stash@{1}

当您在同一个分支上有一个干净的工作目录但不是必需的时,应用存储是最简单的。这个页面很好地描述了 git stash 以及如何使用它。

这不是最完整的证明解决方案,因为我可以预见到当您在同一个项目中有多个人时会出现一些问题,但这是解决这个问题的一种简单方法,而无需求助于更多涉及的解决方案。

于 2016-06-23T17:03:25.060 回答
0

还有另一种方式,您可以通过 cocoapods 分叉存储库、修改更改和维护库,以便将来修复错误和增强功能..... 在此处输入图像描述

我最近在这里发布了相同的教程https://medium.com/@mihirpmehta/how-to-modify-cocoapods-library-within-pods-647d2bf7e1cb

于 2019-02-01T16:27:34.833 回答