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项目。
答案 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 manpage和Chapter 5 of the git community book。
事实上,更简单的解决方案是使用两个repos(cp -rs
)的软链接副本设置发布测试目录。不幸的是,在这种情况下,无论何时将新文件添加到任何一个仓库,都必须记住添加新的软链接。