2011-02-09 64 views
2

Similar questions对此有already been asked,虽然他们不完全是我想要做的。使用Git插件开发

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

我有一个project(伊娃),我正在写一些extensions for it可选。所以如果你想从Github上下载一个副本Eva,它不会包含可选的插件,但你可以单独获取它们并使用它们。

可选的扩展名与Eva驻留在相同的目录结构中。简单的那么远,

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

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

我想测试增加了那些扩展今晚,现在我有他们在我的本地伊娃的git回购之外的单独的目录。为了运行这些测试,我真的需要这些扩展与Eva处于同一个目录中,这些事件依赖于核心系统来运行。

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

我可以在伊娃项目文件复制到扩展回购目录,但如果我修改伊娃的源代码,然后我要保持整个复制这些变化。

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

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

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

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

+1

也许这个简单的答案是让每组扩展都在自己的分支上?在每个分支`.gitignore`文件中都有相应的条目,它们可以共存在同一个目录中? – 2011-02-10 00:48:03

回答

3

我认为你最好的选择是尝试改变项目布局,使每个扩展更独立,I.E.驻留在它的自己的目录下,/扩展名。

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

然后,您还可以允许三方使用他们选择的VCS轻松开发“树外”扩展。

+0

+1好点,这肯定会减少混淆和潜在的冲突 – 2011-02-21 10:13:53

0

在小工程的根目录中放置一个简单的shell脚本,将其称为plugin_manager,让用户列出已安装的插件,列出项目服务器上的可用插件,以及下载并安装新插件?对于最终用户而言,这可能比争夺git子模块更直观,特别是如果他们不熟悉Git。

下载和运行测试可能只是那当用户运行$插件管理器下载FOO模块

对于一个很好的例子,图案检查出的文档The Drush (Drupal shell) commands的脚本执行的步骤之一。

+0

这对我和其他贡献者来说比用户更多。对于用户,我可以将它作为梨形模块,以便它们可以通过频道以及可选的扩展来安装它。 – 2011-02-10 00:21:23

0

我认为这可以通过设置git钩子来实现,以便每次提交(或推送)到核心或扩展仓库(单独保存),从而导致更新包含最新版本的发布测试目录两者的副本。缺乏VonC's的知识,但我只能将您重定向到例如the manpageChapter 5 of the git community book

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