【问题标题】:Shared code between applications应用程序之间共享代码
【发布时间】:2013-07-09 22:03:55
【问题描述】:

我想在我的游戏和游戏编辑器之间分享我的模型。游戏采用 cocos2d 框架开发,包含 c++ 和 Objective-C 代码。编辑器在 Qt 中完成(在 windows 7 atm 上开发)。该模型是纯 C++(没有特定于平台的东西)。

我在工作中遇到了类似的问题,我通过将共享代码导出为项目并为其创建一个存储库来解决它。然后我将它添加为子项目并根据需要对其进行更新,但我不确定是否可以将子项目添加到 Qt。它实际上就像一个静态库存储库,它是编辑器和游戏存储库的子存储库,但我不知道该怎么做。

【问题讨论】:

  • 在它自己的 repo 中一个单独的 C++ 静态库就是答案。这应该没有什么复杂的(你甚至可以用 Xcode 编译它并将其安装到 /usr/local 或其他东西中,并将其视为 3rd-party 库)。
  • @trojanfore - 只需将其作为子存储库添加到两个项目中?
  • 不确定子存储库(从未使用过它们)。我总是有单独的存储库,我将它们安排为文件系统中的兄弟姐妹,并使用 ../otherproject/.. 引用它们。

标签: c++ git qt


【解决方案1】:

听起来你正在寻找的是Git submodules(强调我的):

经常发生在处理一个项目时,您需要使用其中的另一个项目。也许它是第三方开发的库,或者您正在单独开发并在多个父项目中使用的库。在这些场景中会出现一个常见问题:您希望能够将这两个项目视为独立的,但仍然能够在另一个项目中使用其中一个......

Git 使用子模块解决了这个问题。 子模块允许您将 Git 存储库作为另一个 Git 存储库的子目录。这使您可以将另一个存储库克隆到您的项目中并保持您的提交分开。

您还可以阅读有关submodules on the Git docs 的更多信息。

【讨论】:

  • 这个,但在我看来,如果子模块需要经常更改/更新,那么子模块的工作流程很糟糕。
【解决方案2】:

Subtree merging 是另一种选择。

有关git-subtree 脚本背后的血腥细节,请参阅this 和this(按核心性增加的顺序)。

引用后面的手册:

在某些情况下,您希望在您的项目中包含来自独立开发项目的内容。只要没有冲突的路径,您就可以从其他项目中提取。

有问题的情况是存在冲突的文件。潜在的候选者是 Makefile 和其他标准文件名。您可以合并这些文件,但可能您不想这样做。对于这个问题,一个更好的解决方案是将项目合并为它自己的子目录。递归合并策略不支持这一点,因此仅拉取是行不通的。

您想要的是子树合并策略,它可以在这种情况下为您提供帮助。

git-subtree 脚本(在其相对现代的版本中包含在 Git 的 contrib 部分中)有助于子树合并。

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 2017-07-27
    • 2012-12-24
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多