我已经做了几个月的iOS开发了,刚刚了解到有前途的用于依赖管理的CocoaPods库。
我在一个个人项目中尝试过:在我的Podfile中添加了对Kiwi的依赖,运行pod install CocoaPodsTest。Xcodeproj,瞧,它工作得很好。
我唯一想知道的是:我要签入什么,为了版本控制我要忽略什么?似乎很明显,我想签入Podfile本身,也可能是.xcworkspace文件;但是我是否忽略了Pods/目录?是否还会生成其他文件(当我添加其他依赖项时),也应该添加到.gitignore中?
我建议使用GitHub的Objective-C gitignore。
具体来说,最佳实践是:
Podfile必须始终处于源代码控制之下。
Podfile。Lock必须始终处于源代码控制之下。
CocoaPods生成的工作区应该保持在源代码控制之下。
任何使用:path选项引用的Pod都应该保存在源代码控制下。
./Pods文件夹可以保存在源代码控制下。
要了解更多信息,您可以参考官方指南。
来源:我是CocoaPods核心团队的成员,就像@alloy一样
尽管Pods文件夹是一个构建工件,但在决定是否将其置于源代码控制之下时,您可能会考虑以下原因:
CocoaPods is not a package manager so the original source of the library could be removed in future by the author.
If the Pods folder is included in source control, it is not necessary to install CocoaPods to run the project as the checkout would suffice.
CocoaPods is still work in progress and there are options which don’t always lead to the same result (for example the :head and the :git options currently are not using the commits stored in the Podfile.lock).
There are less points of failure if you might resume work on a project after a medium/long amount of time.
我提交我的Pods目录。我不同意Pods目录是一个构建产物。事实上,我想说它绝对不是。它是应用程序源代码的一部分:没有它就无法构建!
我们更容易将CocoaPods视为开发工具,而不是构建工具。它不构建你的项目,它只是为你克隆和安装你的依赖项。为了能够简单地构建项目,不应该必须安装CocoaPods。
通过使CocoaPods成为构建的依赖项,您现在需要确保它在构建项目所需的任何地方都可用……团队管理员需要它,您的CI服务器需要它。通常,您应该始终能够克隆源存储库并进行构建,而不需要做任何进一步的工作。
如果你频繁切换分支,不提交pod目录也会造成巨大的麻烦。现在,每次切换分支时都需要运行pod install,以确保依赖项是正确的。当你的依赖关系稳定时,这可能不那么麻烦,但在项目早期,这是一个巨大的时间消耗。
我忽略了什么?什么都没有。Podfile,锁文件和Pods目录都被提交。相信我,这会帮你省去很多麻烦。缺点是什么?更大一点的回购?又不是世界末日。
TL;DR:当你跟踪Pods/文件夹时,项目更容易
从。当你不跟踪它的时候,就更容易在时间上进行改进
你在一个团队中工作。
虽然Cocoapods组织鼓励我们跟踪Pods/目录,但他们说这取决于开发人员根据这些利弊来决定是否这样做:http://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
就我个人而言,我通常只跟踪那些我暂时不会再做的项目的Pods/文件夹。这样,任何开发人员都可以快速地从中吸取教训,并使用合适的cocoapods版本继续工作。
另一方面,我认为当你不跟踪Pods/文件夹时,提交历史会变得更清晰,更容易合并代码和审查其他人的代码。我通常在安装cocoapod库时设置它的版本,以确保任何人都可以使用与我相同的版本安装项目。
此外,当pod /目录被跟踪时,所有开发人员都必须使用相同版本的Cocoapods,以防止每次我们运行pod install来添加/删除pod时更改数十个文件。
底线:当您跟踪Pods/文件夹时,项目更容易从其中获取。当你不追踪它的时候,就更容易改进。
最后取决于你采取的方法。
Cocoapods团队是这么想的:
是否检查您的Pods文件夹取决于您,因为
工作流程因项目而异。我们建议您保留
pod目录下的源代码控制,不要将它添加到您的
.gitignore。但最终这个决定取决于你。
就我个人而言,我想把Pods排除在外,如果我使用Node,就像node_modules,如果我使用Bower,就像bower_components。这适用于几乎所有的依赖管理器,也是git子模块背后的理念。
然而,有时你可能想要真正确定某个依赖项的最新状态,这样你才能在项目中拥有该依赖项。当然,如果您这样做,会有一些缺点,但这些问题不仅适用于Cocoapods,而且适用于任何依赖管理器。
下面是Cocoapods团队制作的利弊清单,以及之前提到的引文全文。
Cocoapods团队:我应该将Pods目录检入源代码控制吗?