【发布时间】:2011-02-07 09:19:55
【问题描述】:
我在我们编写的 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 提要一起使用的库。我们将这些作为 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 模块,但这有以下问题:
- 皮肤应该在文档根目录上可用,模块代码不应该,如果是,它应该可以通过 .htaccess 保护
- 用 php 代码捆绑资产似乎没有任何意义
- 我们可以在 /skin/backend/ 之间创建一个符号链接以转到 /modules/cms/skin,但这会导致任何安全问题吗?我们是否需要符号链接之类的东西才能使应用程序正常工作?
- 我们可以为 git 或 shell 脚本创建一个钩子,在更新发生时将文件从模块/cms/skin 复制到皮肤/后端,但这意味着我们无法在项目中编辑 CMS 核心文件然后推送它们返回
这通常如何在大型 cms 中完成?如何在版本控制下获取 cms 的源代码,为客户端处理应用程序,然后将源代码更新为版本并由供应商提供? Magento 或 Drupal 等应用程序是如何做到这一点的?
【问题讨论】:
标签: php git version-control content-management-system