CocoaPods和GitHub分支


108

这是我第一次创建GitHub项目,并且我对CocoaPods也不太满意,所以请多多包涵。

基本上,我使用以下代码在GitHub上创建了一个项目Podfile

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

然后,我对前叉进行了一些更改,当然,当我做一个pod install安装另一个Pod的操作时,它重新安装了原始Pod REActivityViewController并清除了我的更改。

我意识到我需要先将更改推送到我的fork上pod install,但是考虑到这是CocoaPods安装的回购协议,我怎么知道它正在安装fork?我看了看REActivityViewController安装在该Pods文件夹下的文件夹,没有任何git文件。

我是否需要在项目之外的分支上工作,然后使用CocoaPods安装更改?这太繁琐了。

还是我需要对子模块做些事情?

Answers:


185

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

https://github.com/getaaron/TTTAttributedLabel

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

  1. 将更改推送到我的叉子
  2. 配置我的Podfile以获取更改并更新

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

然后,您可以像这样在Podfile中的fork上指定特定的提交:

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

之后,pod update将从您的fork更新此特定提交。如果需要,也可以podspec为您的fork 制作一个,但是我发现这种方法更简单,并且我所做的更改不足以证明新的工作流程合理。

我是否需要在项目之外的分支上工作,然后使用Cocoapods安装更改?这是麻烦的工作流程。

您可以通过这种方式进行,但是我通常:

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

还是我需要对子模块做些事情?

不,您不需要。


后续问题:那么真的有必要使用新的SHA更新Podfile吗?pod install是否会自动使用最新提交自动克隆最新版本?
拉姆瑟尔2014年

如果您将项目重命名为其他名称并创建自己的podspec文件,则可以将其指向您自己的存储库并使用pod 'MyForkName', :head
亚伦·布拉格2014年

1
:head:指向最新的提交,但您不能在同一行中使用:git:head
亚伦·布拉格2014年

4
这是使用公共项目的自定义派生的完美解决方案。就我而言,我创建了一个项目并对其进行了修改,并为维护人员提供了一个开放的PR以合并这些更改,但是我想更新我项目的Podfile以立即使用这些更改。这很棒!
cbowns 2015年

2
@AaronBrager它显示“无法找到'<pod name>'的规范”“您知道如何解决它吗?
Susim Samanta

34

另一个选择是让您的项目直接引用pod,而不是通过github。这样,您不必为了进行更改而继续提交fork或复制/粘贴代码。您可以同时使用两个不同的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

在此处输入图片说明


1
这如何解决问题?Pod将提取这些源并将其作为Pod项目放置在源项目中。这些文件(现在已通过Pods包含)的任何更改都不会被“〜/ Documents / AFNetworking”的Git跟踪,不是吗?
Raj Pawan Gumdal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.