2010-04-13 117 views
3

我在CMS应用下面的目录结构,我们已经写:版本控制内容管理系统?

/application 
/modules 
    /cms 
     /filemanager 
     /block 
     /pages 
     /sitemap 
    /youtube 
    /rss 
/skin 
    /backend 
     /default 
     /css 
     /js 
     /images 
    /frontend 
    /default 
     /css 
     /js 
     /images 

应用程序包含特定于当前CMS实现代码,即代码为这个特定厘米。 模块包含我们在各个项目之间共享的代码的可重复使用部分,例如与YouTube或rss提要一起使用的库。我们将它们包含为git子模块,以便我们可以更新任何网站中的模块,并将更改推回到所有其他项目中。它使得对代码进行更改并分发它变得非常简单。我们希望将CMS变成一个模块,以便获得同样的好处 - 我们可以在源代码控制下运行整个项目,然后根据需要通过git子模块更新cms。但是,我们遇到了一个问题: cms需要javascript/images/css才能正常工作。

事情,我们曾经想过:

  • 我们可以创建2个子模块,一个CMS的皮肤,一个用于CMS,但这意味着你不能“混帐拉”一个版本,而不必的一些想法哪些版本的皮肤与哪些版本的cms一起工作。即1.2.2版CMS可能与1.0.3 CMS-皮肤问题

  • 我们可以在皮肤添加到CMS模块,但这有以下问题:

    1. 皮肤应该可以对文件根本,模块代码不应该,如果它应该可以通过.htaccess
    2. 保护它似乎没有任何意义与php代码捆绑资产
    3. 我们可以创建一个/皮肤/后端/去/模块/ cms /皮肤,但这会导致任何安全问题,我们是否需要像一个符号链接该应用程序工作?
    4. 我们可以创建一个git钩子或一个shell脚本,用于在发生更新时将文件从modules/cms/skin复制到皮肤/后端,但这意味着我们将无法在项目中编辑CMS核心文件,然后将它们推送回到

这是怎么一般在大型CMS的呢?如何在版本控制下获取cms的源代码,为客户端应用程序,然后将源代码更新为供应商提供的版本?像Magento或Drupal这样的应用程序如何做到这一点?

回答

2

我不熟悉的CMS项目,但你能:

  • 创建2个子模块,一个CMS的皮肤,一个用于CMS
  • 使用CMS-皮肤CMS
  • 内嵌套子模块

cms将是cms-skin的“主要项目”,这意味着每次提交cms时,您都会首先提交cms-skin,而“cms commit”会启动cms-skin的确切SHA1引用,在提交时使用的皮肤。

这样你就可以只拉cms,并且它将会得到你需要的cms-skin的确切版本。

欲了解更多信息,请参阅此SO answer关于子模块的真实性质。

+0

当然 - 我知道git repos通过他们的sha-hash跟踪子模块的当前状态,问题是虽然把cms-skin放在cms里会导致很多其他问题,我在上面解释过 – Mike 2010-04-13 10:50:48

+0

@Mike:是的,但我没有得到确切的限制。这个想法是在cms中的适当位置插入/插入皮肤,b /插入皮肤版本(即特殊分支),并重新组织内容以符合其新位置(即在cms内) – VonC 2010-04-13 11:00:47

+0

“皮肤应该是可以在文档根目录下找到,模块代码不应该,如果是的话,它应该可以通过.htaccess进行保护“ – Mike 2010-04-15 10:16:24