我正在寻找一种方法来组织我的项目的存储库。该项目是封闭源代码,但它包含一个我希望公开发布的子文件夹。该文件夹包含从主项目调用的“插件”。所有这些插件都需要主项目,但主要项目当然不需要它们工作。
通常的方法是使用子模块作为插件,但我对这对主项目意味着什么不太满意。由于主要开发与插件完全分开,我不想用插件子模块的更新搞砸它的历史,我实际上不希望插件成为主(核心)程序的一部分。
所以我更想要的是相反的情况,主程序是插件存储库的子模块,因此主要开发完全独立于插件。问题是我的程序结构要求插件位于主目录树的内部,以便可以正确访问它们。
对于子模块是“更大”还是“外部”存储库的情况,是否存在一些标准方法?或者你有另一个想法来解决这个问题吗?
答案 0 :(得分:2)
三个选项:
只需手动单独复制插件repo即可。将“plugins”目录添加到运行时repo的.gitignore文件中,并在README中添加一个注释,详细说明插件repo的位置以及如何克隆它。插件repo可以随时使用简单的cd plugins; git pull
进行更新。如果你想避免额外的步骤,你可以在本地主git仓库上添加一个post-receive钩子来更新插件仓库,但这只会影响你的本地仓库。
使用子模块。为了将最新的插件添加到运行时环境中,您必须执行提交以跟踪插件子模块的头部。例如。 git add plugins; git commit -m "tracking latest plugins"
。然后可以使用git pull; git submodule update --init --recursive
使用子树。我不认为这是你想要的,但你可以在Pro Git阅读。更新插件需要多个步骤,这些步骤在生产过程中甚至可能无法实现。
如果您有某种自动构建系统,我会考虑一个子模块。否则我会选择1,因为它维护得最少。