独立插件的子模块

时间:2011-12-05 17:11:13

标签: git git-submodules

我正在寻找一种方法来组织我的项目的存储库。该项目是封闭源代码,但它包含一个我希望公开发布的子文件夹。该文件夹包含从主项目调用的“插件”。所有这些插件都需要主项目,但主要项目当然不需要它们工作。

通常的方法是使用子模块作为插件,但我对这对主项目意味着什么不太满意。由于主要开发与插件完全分开,我不想用插件子模块的更新搞砸它的历史,我实际上不希望插件成为主(核心)程序的一部分。

所以我更想要的是相反的情况,主程序是插件存储库的子模块,因此主要开发完全独立于插件。问题是我的程序结构要求插件位于主目录树的内部,以便可以正确访问它们。

对于子模块是“更大”还是“外部”存储库的情况,是否存在一些标准方法?或者你有另一个想法来解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

三个选项:

  1. 只需手动单独复制插件repo即可。将“plugins”目录添加到运行时repo的.gitignore文件中,并在README中添加一个注释,详细说明插件repo的位置以及如何克隆它。插件repo可以随时使用简单的cd plugins; git pull进行更新。如果你想避免额外的步骤,你可以在本地主git仓库上添加一个post-receive钩子来更新插件仓库,但这只会影响你的本地仓库。

  2. 使用子模块。为了将最新的插件添加到运行时环境中,您必须执行提交以跟踪插件子模块的头部。例如。 git add plugins; git commit -m "tracking latest plugins"。然后可以使用git pull; git submodule update --init --recursive

  3. 完成更新/部署
  4. 使用子树。我不认为这是你想要的,但你可以在Pro Git阅读。更新插件需要多个步骤,这些步骤在生产过程中甚至可能无法实现。

  5. 如果您有某种自动构建系统,我会考虑一个子模块。否则我会选择1,因为它维护得最少。