Xcode 4工作区有两个相互依赖的项目:我还应该使用git子模块吗?

时间:2012-01-09 11:49:30

标签: git xcode4 git-submodules

我正在开发一个iOS应用程序,并将代码库分成两个独立的项目:一个用于Web服务的客户端库,以及一个依赖于客户端库的应用程序项目。

两个项目都已添加到单个Xcode工作区,并且已正确声明了依赖项。

每个项目都有自己的git存储库。目前我将两个项目签出到两个单独的目录中,并且我彼此独立地管理两个git存储库。目前定义这两段代码之间依赖关系的唯一地方是应用程序的Xcode项目。

但是,我想知道是否应该将客户端库git存储库添加为应用程序存储库的git submodule。这在概念上是正确的,但我之前没有使用过git子模块,我想知道是否有任何与Xcode一起使用这种方法的问题?

(我可以找到很多关于如何使用Xcode工作区管理这样的项目间依赖关系的博客文章,以及其他关于git子模块的大量文档,但我找不到一个经过试验和测试的工作流程的单一帐户如果您知道其中一个,请发布一个链接!)

2 个答案:

答案 0 :(得分:2)

我之前参与过已完成此项工作的项目,全部使用以下布局:

 * app-workspace
  * App.workspace
  * library [submodule]
   * Library.xcodeproj
   * library sources
  * app [submodule]
   * App.xcodeproj
   * app sources

因此工作区知道项目和构建方案。工作区的git存储库知道包含项目的子模块。

实际上,要保持最高级别的子模块定义是最新的,所以我们通常最终会处理子模块的主分支。在添加重要更改时,会将特定版本提交到工作区的子模块:如果CI系统是从顶级项目构建的,则不会太频繁。

当然,对于单元测试,您可以单独指向每个子模块的CI,它只是需要整个工作区的集成测试。在这里记住的一个重要步骤 - 我偶尔会搞砸的是 - 在将提交推送到CI和开发人员存储库的共享源之后,您应该只将子模块定义更新为特定提交。如果您忘记了这一点,那么当父项目引用他们没有的子模块时,您可能会面临其他人的结账风险。

您可能遇到与Xcode交互问题的地方在于定义构建方案。我最近采用的方法是使用方案编辑器来定义我想要用作共享(而不是每个用户)的方案,并在顶层的工作空间中定义,而不是在子模块中的项目中定义。 。完成后,以及那些致力于git的方案定义,关闭自动方案生成。现在,您的所有开发人员和CI系统都同意如何构建您的产品。

答案 1 :(得分:2)

使用子模块对您正在做的事情有意义。特别是如果客户端库不会发生太大变化。

并且,这意味着访问您的存储库的其他人知道该库是一个单独的项目,并且保持提交分离。

我偶尔会发现存储库因为子模块被修复而受到损坏,但这通常只是将其删除并重新添加它们。

从主项目的根目录开始:

git submodule add <path to repo>
git submodule update

应该只需要使用。