我已经做了几个月的iOS开发了,刚刚了解到有前途的用于依赖管理的CocoaPods库。
我在一个个人项目中尝试过:在我的Podfile中添加了对Kiwi的依赖,运行pod install CocoaPodsTest。Xcodeproj,瞧,它工作得很好。
我唯一想知道的是:我要签入什么,为了版本控制我要忽略什么?似乎很明显,我想签入Podfile本身,也可能是.xcworkspace文件;但是我是否忽略了Pods/目录?是否还会生成其他文件(当我添加其他依赖项时),也应该添加到.gitignore中?
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/文件夹时,项目更容易从其中获取。当你不追踪它的时候,就更容易改进。
检查舱。
我认为这应该成为软件开发的一个原则
所有构建都必须是可复制的
确保构建的唯一方法是
可复制性是指控制所有依赖关系;全部签到
因此,依赖性是必须的。
一个从头开始的新开发人员应该能够检查您的项目并开始工作。
Why?
CocoaPods或任何其他外部库可能会改变,这可能会破坏事情。或者它们可能会移动,或者被重新命名,或者完全被移除。你不能依赖互联网为你储存东西。你的笔记本电脑可能死机了,生产中有一个严重的bug需要修复。主要开发人员可能会被公共汽车撞到,而他的替代者不得不匆忙启动。我希望最后一个例子只是理论上的但它确实发生在我工作的一家初创公司。撕裂的声音。
现在,实际上,您不能真正检入所有依赖项。您不能检入用于创建构建的机器的映像;你不能检入编译器的确切版本。等等。有现实的限制。但是你要尽可能地检查——不这样做只会让你的生活更加艰难。我们不希望这样。
最后一句话:pod不是构建工件。构建构件是从构建中生成的。您的构建使用Pods,而不是生成它们。我都不知道为什么要讨论这个问题。
.gitignore file
没有答案真的提供了。gitignore,所以这里有两种口味。
在Pods目录中检查(好处)
Xcode/iOS友好的git忽略,跳过Mac OS系统文件,Xcode,构建,其他存储库和备份。
. gitignore:
# Mac OS X Finder
.DS_Store
# Private Keys
*.pem
# Xcode legacy
*.mode1
*.mode1v3
*.mode2v3
*.perspective
*.perspectivev3
*.pbxuser
# Xcode
xcuserdata/
project.xcworkspace/
DerivedData/
# build products
build/
*.[oa]
# repositories
.hg
.svn
CVS
# automatic backup files
*~.nib
*.swp
*~
*(Autosaved).rtfd/
Backup[ ]of[ ]*.pages/
Backup[ ]of[ ]*.key/
Backup[ ]of[ ]*.numbers/
忽略Pods目录(好处)
.gitignore:(附加到前面的列表)
# Cocoapods
Pods/
不管你是否检查Pods目录,Podfile和Podfile。Lock应该始终保持在版本控制之下。
如果pod没有签入,您的Podfile可能需要为每个Cocoapod请求明确的版本号。Cocoapods.org的讨论。
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/文件夹时,项目更容易从其中获取。当你不追踪它的时候,就更容易改进。
Cocoapod文档中直接给出了答案。你可以看看“http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control”。
Whether or not you check in your Pods folder is up to you, as
workflows vary from project to project. We recommend that you keep the
Pods directory under source control, and don't add it to your
.gitignore. But ultimately this decision is up to you:
Benefits of checking in the Pods directory
After cloning the repo, the project can immediately build and run, even without having CocoaPods installed on the machine. There is no
need to run pod install, and no Internet connection is necessary.
The Pod artifacts (code/libraries) are always available, even if the source of a Pod (e.g. GitHub) were to go down.
The Pod artifacts are guaranteed to be identical to those in the original installation after cloning the repo.
Benefits of ignoring the Pods directory
The source control repo will be smaller and take up less space.
As long as the sources (e.g. GitHub) for all Pods are available, CocoaPods is generally able to recreate the same installation.
(Technically there is no guarantee that running pod install will fetch
and recreate identical artifacts when not using a commit SHA in the
Podfile. This is especially true when using zip files in the Podfile.)
There won't be any conflicts to deal with when performing source control operations, such as merging branches with different Pod
versions.
Whether or not you check in the Pods directory, the Podfile and
Podfile.lock should always be kept under version control.
最后取决于你采取的方法。
Cocoapods团队是这么想的:
是否检查您的Pods文件夹取决于您,因为
工作流程因项目而异。我们建议您保留
pod目录下的源代码控制,不要将它添加到您的
.gitignore。但最终这个决定取决于你。
就我个人而言,我想把Pods排除在外,如果我使用Node,就像node_modules,如果我使用Bower,就像bower_components。这适用于几乎所有的依赖管理器,也是git子模块背后的理念。
然而,有时你可能想要真正确定某个依赖项的最新状态,这样你才能在项目中拥有该依赖项。当然,如果您这样做,会有一些缺点,但这些问题不仅适用于Cocoapods,而且适用于任何依赖管理器。
下面是Cocoapods团队制作的利弊清单,以及之前提到的引文全文。
Cocoapods团队:我应该将Pods目录检入源代码控制吗?