使用git进行插件开发

时间:2011-02-09 23:56:40

标签: git github git-submodules subtree subproject

Similar questions对此有already been asked,虽然它们并不是我想要做的。

起初我以为我需要一个git子模块,然后设置一个超级项目,然后是一个子树合并,但我不确定这些是否真的适合。

我有一个project(Eva),我正在写一些可选extensions for it。因此,如果您要从Github下载Eva副本,它将不包含可选插件,但您可以单独获取它们并使用它们。

可选扩展名与Eva位于同一目录结构中。到目前为止很简单......

Eva
 |
 --- system/
 --- events/
   |
   --- core_events
 --- tests/
   |
   --- core_tests

Extension A
 |
 --- events/
   |
   --- [extension A]
 --- tests/
   |
   --- [extension A tests]

我想今晚为这些扩展添加测试,目前我将它们放在我当地的Eva git repo之外的单独目录中。为了运行这些测试,我真的需要将这些扩展与Eva放在同一个目录中,事件依赖于核心系统来运行。

Eva
 |
 --- system/
 --- events/
   |
   --- core_events
   --- [extension A]
   --- [extension B]
 --- tests/
   |
   --- core_tests
   --- [extension A tests]
   --- [extension B tests]

我可以将Eva项目文件复制到扩展名repo目录中,但如果我修改了Eva的源代码,那么我必须继续复制这些更改。

我应该继续使用这种笨拙的设置吗?还是有更优雅的方式git可以容纳这个?

也许我的要求与其他问题相反。我的扩展是Eva的子项目,我需要偶尔从它周围的Eva回购中获取更新。

如果我将扩展名repo添加为子模块,当有人克隆Eva时,他们也会获得所有可选插件吗?我不希望这样。

不确定子树合并是否合适,我将永远不必将扩展项目拉入核心Eva项目。

3 个答案:

答案 0 :(得分:3)

我认为您最好的选择是尝试更改项目布局,以使每个扩展更加独立,I.E。它位于自己的目录下,例如/ extensions。

在框架启动/ testrun上,扫描该目录并动态加载扩展。这样你不仅可以轻松开发和使用git,而且还可以使各种包装选项更容易,I.E。 tar包。它使用户可以轻松查看使用的扩展名。

然后,您还可以让3d-parties使用他们选择的VCS轻松开发“out-of-tree”扩展。

答案 1 :(得分:0)

一个简单的shell脚本位于小时项目的根目录中,称之为plugin_manager,它允许用户列出已安装的插件,列出项目服务器上的可用插件,然后下载并安装新的插件?对于最终用户来说,这可能比争论git子模块更直观,特别是如果他们不熟悉Git。

下载并运行测试可能只是当用户运行$ plugin-manager下载foo-module时脚本执行的步骤之一

有关示例模式的详细信息,请查看The Drush (Drupal shell) commands的文档。

答案 2 :(得分:0)

我认为这可以通过使用git hook设置来实现,这样每次提交(或推送)到核心或扩展repos(单独保存)都会导致更新包含最新副本的发布测试目录两者。由于缺乏VonC's对此的了解,我只能将您重定向到例如the manpageChapter 5 of the git community book

事实上,更简单的解决方案是使用两个repos(cp -rs)的软链接副本设置发布测试目录。不幸的是,在这种情况下,无论何时将新文件添加到任何一个仓库,都必须记住添加新的软链接。