版本控制内容管理系统?

时间:2010-04-13 10:05:15

标签: php git version-control content-management-system

我在编写的CMS应用程序中有以下目录结构:

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

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

我们想到的事情:

  • 我们可以创建2个子模块,一个用于cms-skin,另一个用于cms,但这意味着你不能“git pull”一个版本而不知道哪个版本的皮肤可以使用哪个版本的cms。即版本1.2.2 CMS可能存在1.0.3 CMS-Skin

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

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

这通常是如何在大型cms中完成的?如何在版本控制下获取cms的源代码,为客户端处理应用程序,然后将源代码更新为发行版并由供应商提供?像Magento或Drupal这样的应用程序如何做到这一点?

1 个答案:

答案 0 :(得分:2)

我不熟悉CMS项目,但您可以:

  • 创建2个子模块,一个用于cms-skin,另一个用于cms
  • 使用cms-skin作为cms
  • 中的嵌套子模块
cms将是cms-skin的“主要项目”,这意味着每次你提交cms,你都会首先提交cms-skin,而“cms commit”会使用cms-skin的确切SHA1引用在提交时。

通过这种方式你只能拉动cms,并且它会带来你所需要的cms-skin的确切版本。

有关详情,请参阅此 SO answer ,了解子模块的真实性质。