一段时间以来,我一直在为这个项目采用哪种方法而苦苦挣扎,并决定听取社区的一些建议。
我们正在开发一个开源框架,允许其他人通过实现一些接口来使用它的功能。通过实现这个接口,其他人实质上是在开发这个框架的插件(或者至少我是这么认为的,并将在这个问题的其余部分调用它)。
我们使用git作为框架的版本控制。(最终将被上传到Github或类似的位置)。该项目是使用CMake构建的。
除了允许其他人选择开发他们自己的插件之外,我们还希望提供一些我们自己的实现作为开源。这既是为了提供通用用法,也是为了教程目的(展示如何实现接口和其他用法示例)。为了模拟这类插件的真实开发,我们的插件(让我们称之为Plugin1)是在与框架不同的git存储库中实现的。
为了支持框架和我们的插件的编译,框架有一个" plugins“文件夹,我们希望它包含提供接口实现的CMake项目的文件夹。除了使用CMake之外,我们不会对这些项目做任何假设。(将插件添加到树中-通过搜索插件文件夹的脚本调用add_subdirectory() )
所以基本上我们有这样的东西:
. (framework repository)
├── CMakeLists.txt
├── plugins
│ ├── CMakeLists.txt
│ ├── plugin1
│ ├── plugin2
│ ├── user_implemented_plugin_1
│ └── other plugins...
├── src
├── tests
└── etc...其中./plugins/下的每个插件都是一个不同的git存储库(有些是我们自己的,有些可能是用户实现的)。因此,为了下载每个插件,我们会对每个代码库执行git clone操作(如果需要,我们还会签出一些特定的标签)。
我们不期望用户使用这种方式(他们应该make install框架或通过包安装它),但对于我们的开发来说,这是很方便的。
这种方式帮助我们在构建系统中测试框架(使用下载插件repos的简单脚本)。正如我已经说过的,最终这将成为开源的,我们希望开发人员下载框架以及我们开发的插件。这就是它可能变得不方便的地方,因为用户将不得不使用脚本来下载存储库,或者必须手动完成,我不确定这是最好的方法。
我的问题实际上更多的是请求建议和反馈。我在网络上寻找这类开发的最佳实践,但什么也找不到。一些人建议使用google repo,但这似乎有点过头了。一些人建议使用git子模块,但据我所知,这是针对父存储库依赖于子存储库的情况,而我的情况正好相反。
像这样开发这个项目,我是不是犯了什么新手的错误?git是否支持管理这类树?你有推荐使用的工具吗?
发布于 2017-04-16 22:32:00
为了让插件依赖于框架,你可以将框架库中的代码添加到插件库中。假设你想要框架仓库中的master分支的代码应用于插件仓库,你可以使用
git subtree add --prefix=user <URL for framework repo> masterhttps://stackoverflow.com/questions/43388858
复制相似问题