最好的git和Xcode结构,用于演变相同产品的变体

问题描述:

Best practice for managing project variants in Git?上有类似的问题,但上下文不同,我怀疑答案可能也是如此。最好的git和Xcode结构,用于演变相同产品的变体

我有一个Cocoa产品“第一”与Xcode管理和使用git版本。 “第一”仍在不断演变,目前正处于第三个版本。

然后,一位顾客前来询问First的一个变体,称为Second。从第一到第二的变化会影响许多文件,但不是全部。这些更改会影响源代码,但也会影响资源(图形元素,笔尖文件,属性列表...)。

现在这两种产品都是活的并且共享许多通用文件。但是,一些更改(如错误修复)可能适用于这两种产品。可能的是,两种产品都可能会添加一项新功能。

什么是管理这种情况下最好的办法:

  • 在Xcode
  • 用git

我有两个想法,这是相互排斥的:

理念1:git分支将“第一”分为“第二”,并将任何适用的更改从一个项目应用到另一个项目。这导致两个完全独立的Xcode目录和项目。

想法2:将一个名为“Second”的目标添加到Xcode项目中。现在,相同的Xcode项目有两个目标,用于开发和构建这两种产品。但是这使得难以管理git中的First和Second版本(版本没有理由被同步)。

想法2使并行开发过程非常简单。代码始终保持同步。可以通过编译时变量和单个源文件或通过不同的源文件处理差异。它使版本管理更加模糊。

想法1可能更干净,但是,那么管理两个项目之间通用的最佳做法是什么?你可以在两个git分支之间进行“部分合并”吗?基于什么?或者必须手动处理?

将某些常见部分封装并提取到模块或库中可能是可能的,但并非总是如此。例如,我不认为这是可能的通用文档图标。同时重构“第一”,以便所有常见项目都能以可构建的方式提取出来,这是我宁愿一次做一件大事。

我意识到可能没有完美的解决方案。我正在寻找想法和建议。 作为一个相对最近的git采用者,我也意识到这可能是一个RTFM问题。然后,简单地指向我的调频到R.

非常感谢。

我的首选是idea2。我目前这样做是为了编写主应用程序的插件,然后编写集群所有节点上的客户端应用程序。插件和客户端共享相同代码的90%,所以这使得它非常容易维护和调试发生了什么的地方/方式。