我想问一下您的做法,使您的第三方库容易地更新。
在我的iPhone项目中,我使用了相当多的第三方库(比如TouchXML、JSON、RegexKit、YAJL、MGTwitterEngine……)。其中大部分存储在GitHub中,它们的版本,特别是MGTwitterEngine,变化很快(因为添加了新功能,修复了错误,改变了服务器(如推特)的响应格式……)。
有时,我忘记更新(也不想更改稳定版本),然后我的项目就会因为过时的库而出现错误。
当我遇到一个bug时因为旧的库。我经常去Github,下载新版本,然后需要修改很多代码。因为下载新版本意味着我从一个非常旧的版本快进到最新的版本。我认为如果我更频繁地更新库,就不那么痛苦了。
你对这项任务的方法是什么?
发布于 2010-07-16 20:46:34
你调查过git submodules吗?
我使用它们来完成这项任务。我们有一个助手类的存储库。但是,每当我们进行添加和改进时,我们都希望将这些改进级联到我们所有的项目中--因此,我们将助手存储库设置为每个项目存储库中的一个子模块。
在存储库的根目录中尝试执行以下命令:
git submodule add ssh://url/to/external/library.git local/path这应该执行以下步骤(从上面的URL逐字获取):
.gitmodules文件,并将此文件添加到索引,准备将子模块的当前提交ID committed.然后,您可以使用
git submodule update命令以使内容保持最新。
另外,作为附注,如果您正在做我正在做的事情(例如,对子模块存储库进行直接更改),您需要转到子模块的根存储库目录,并在提交超级项目之前首先提交这些更改。这是因为git会跟踪子模块的版本(smart),所以如果您首先提交超级项目,您将存储对尚未提交到子模块存储库的更改的引用。任何试图克隆你的超级项目的人都会收到一个错误。
发布于 2012-04-23 22:09:39
现在是2012年了,自从这个问题被提出以来,已经出现了两个项目,它们旨在使在iOS代码中管理项目依赖项变得更加容易:CocoaPods和VendorKit。两者都受到Ruby依赖项管理器Bundler的启发。CocoaPods可能是最成熟和最活跃的项目,但这两个项目都在获得吸引力。
Git子模块在组织您的项目和依赖关系方面对有很大帮助,但要获得正确的搜索路径和链接器标记仍然是一件麻烦的事情,更不用说如果依赖关系破坏了就找出问题所在。这也很难处理A和B都依赖于C的情况,其中A是您自己的项目,B和C是依赖项。因此,我的建议是,在这个时间点上,使用这些项目之一,并通过为各种库编写规范来支持它们。
还有一个鲜为人知的Kit,它是用Haskell实现的。值得一查。
https://stackoverflow.com/questions/3261962
复制相似问题