当新版本的pod可用时,“pod update”会覆盖我的代码更改吗?

时间:2013-05-17 16:01:09

标签: ios xcode cocoapods

我已经使用cocoapods将MKStoreKit版本4.99添加到我的项目中。我的Podfile包含:

platform :ios, '6.0'
pod 'MKStoreKit', '~> 4.99'

MKStoreKit有一个名为MKStoreKitConfigs.h的配置文件,需要在每个项目的基础上修改,我已经适当地修改了文件。当MKStoreKit发布新版本(比如5.0)并执行pod update时会发生什么?我的更改会被覆盖吗?你能描述一下为什么是或为什么没有?

3 个答案:

答案 0 :(得分:6)

是的,pod更新将覆盖您的更改。你可以做的是在Github上分叉项目,在你的fork中进行更改并将Cocoapods指向fork。有关如何执行此操作,请参阅Use a fork of Restkit on github via cocoaPod?

答案 1 :(得分:5)

据我所知,这是一个已知问题,也有人说:“在头文件中配置第三方库是一种不好的做法。”

首先,您可以查看this commit。 IMO这是一种更好的配置方式。

您还可以使用以下方法将您的前叉添加为Pod:

pod 'MKStoreKit.MyFork', :path => 'MKStoreKit.MyFork.podspec'

编辑: 感谢 rounak 注意,:local现在是:path。来自cocoapods docs:

  

使用此选项(:path)CocoaPods将假定给定的文件夹为   Pod的根目录,将直接从那里链接文件   豆荚项目。这意味着您的修改将持续存在   CocoaPods安装。引用的文件夹可以是结帐   你最喜欢的SCM,甚至是当前回购的git子模块。

答案 2 :(得分:0)

这是一篇旧帖子,但我有一个相当简单的解决方法,可以保留你在Pod上所做的更改。

如上所述,pod update将覆盖您所做的任何更改。但是,如果您正在使用git,我想要做的就是提交除我的pod更改之外的所有更改。

一旦我的分支上的唯一更改是Pod更改,我通过运行git stash save "Custom Cocoapod changes, apply after every pod update"来隐藏pod更改。你可以通过改变""之间的文字给它任何你想要的信息。

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

请勿使用git stash pop,因为这会在应用后删除藏匿。

现在,在将来的某个未确定的时间,当您更新您的广告连播及其再次应用存储的时间时,您要执行的操作是git stash list。这将返回您使用最新零索引进行的所有存储的列表。你可能会看到这样的事情:

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

如果自定义可可豆荚更改藏匿在隐藏@ {0}然后完美,您可以再次运行git stash apply,并且您将在工作目录中获得这些更改。否则,一旦找到您的广告连播更改的存储号码,您就可以通过运行git stash apply stash@{1}来应用该存储空间

当您在同一分支上有一个干净的工作目录但不需要时,应用stashes是最简单的。 This page给出了git stash的良好描述以及如何使用它。