我一直在努力解决这个项目的问题,并决定从社区中获取一些建议。
我们正在开发一个开源框架,允许其他人通过实现某些界面来使用其功能。通过实现这个界面,其他人实际上正在开发一个这个框架的插件(或者至少是我如何看待它并将在本问题的其余部分调用它)。
我们使用git作为框架的版本控制。 (最终将上传到Github等)。 该项目是使用CMake构建的。
除了允许其他人选择开发自己的插件之外,我们还有一些我们想要提供的开源实现。这既可用于提供常用用途,也可用于教程目的(显示如何实现界面和其他用法检查)。为了模拟这种插件的真实世界开发,我们的插件(让我们称之为Plugin1)是在与框架不同的git存储库中实现的。
为了支持框架和插件的编译,框架有一个"插件"我们希望包含提供接口实现的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
每个repo(如果我们需要,我们签出一些特定的标签)。
我们不希望用户使用这种方式(他们应该make install
框架或通过包安装它),但是对于我们的开发来说很方便。
这种方式可以帮助我们在构建系统中测试框架(使用下载插件存储库的简单脚本)。 正如我所说,最终这将成为开源,我们希望开发人员下载框架以及我们开发的插件。 这可能会变得不方便,因为用户必须使用脚本来下载存储库,或者必须手动完成,我不确定这是最好的方法。
我的问题更多的是建议和反馈请求。 我浏览了网络上的最佳实践,以及这种开发,但无法找到任何东西。 有人建议使用谷歌回购,但它似乎有点矫枉过正。 有人建议使用git子模块,但根据我的理解,这适用于父回购取决于子回购的情况,而我的情况则是另一种方式。
我是否正在做一些新手错误开发这样的项目? git是否支持管理这种树?有没有你建议使用的工具?
答案 0 :(得分:0)
为了使插件依赖于框架,您可以将框架repo中的代码添加到插件库中。假设您希望框架存储中的master
分支代码适用于插件存储库,您可以使用
git subtree add --prefix=user <URL for framework repo> master