114

这是我第一次 fork 一个 GitHub 项目,我对 CocoaPods 也不是很擅长,所以请多多包涵。

基本上,我在 GitHub 上使用以下内容在我的 GitHub 上创建了一个项目Podfile

pod 'REActivityViewController', '~> 1.6.7', :git => 'https://github.com/<username>/REActivityViewController.git'

然后,我对 fork 进行了一些更改,当然,当我pod install安装另一个 pod 时,它重新安装了原版REActivityViewController并删除了我的更改。

我意识到我需要在另一个之前将我的更改推送到我的 fork pod install,但是考虑到这是 CocoaPods 安装的 repo,我怎么知道它是安装的 fork?我查看了REActivityViewController安装在文件夹下的Pods文件夹,没有任何 git 文件。

我是否需要在我的项目之外的 fork 上工作,然后使用 CocoaPods 来安装更改?这样的工作流程太麻烦了。

还是我需要对子模块做些什么?

4

2 回答 2

199

我将通过一个例子来回答这个问题。我有一个 TTTAttributedLabel 的分支,我在这里添加了一些额外的功能:

https://github.com/getaaron/TTTAttributedLabel

为了在 Cocoapods 项目中使用它,我:

  1. 将我的更改推送到我的 fork
  2. 配置我的 Podfile 以获取更改和更新

将更改推送到 fork 后,获取上次提交的 SHA。您可以使用git rev-parse origin/master | pbcopy或在项目的GitHub 提交页面上执行此操作: 在 GitHub 上复制提交的 SHA 的屏幕截图

然后,您可以在 Podfile 中指定 fork 上的特定提交,如下所示:

pod 'TTTAttributedLabel', :git => 'https://github.com/getaaron/TTTAttributedLabel.git', :commit => 'd358791c7f593d6ea7d6f8c2cac2cf8fae582bc1'

之后,pod update将从你的 fork 更新这个特定的提交。如果你愿意,你也可以podspec为你的 fork 做一个,但我发现这种方法更简单,而且我没有足够频繁地进行更改来证明新工作流程的合理性。

我是否需要在我的项目之外处理我的 fork,然后使用 Cocoapods 来安装更改?这是繁琐的工作流程。

你可以这样做,但我通常:

  1. 编辑我的项目中的代码并确保它有效
  2. 将更改复制到我的 fork,通过
    • 导出补丁,或
    • 复制整个源代码文件
  3. 提交并推送到 GitHub
  4. 使用新的 SHA 更新 Podfile
  5. 运行pod update

还是我需要对子模块做些什么?

不,你不需要。

于 2014-01-05T19:17:24.380 回答
35

另一种选择是让您的项目直接引用 pod,而不是通过 github。这样您就不必为了测试您的更改而继续提交您的分叉或复制/粘贴代码。您可以同时使用两个不同的 Xcode 项目,并分别提交到它们各自的项目中。

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

CocoaPods 文档: http ://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine

在此处输入图像描述

于 2015-04-01T19:21:10.660 回答