我们有一个系统,其中一台服务器上使用定制的 CMS。30-40 个客户使用此 CMS。每个客户 CMS 的大多数文件都是相同的(除了几个文件夹),因为每次我们添加新功能/补丁/错误修复时,我们都会将其推广到所有客户。我们希望将这些文件整合到一个地方,以便我们可以更轻松地从 SVN 部署更改。
每个用户帐户都有这样的结构:
/home/user/public_html/css/
/images/
/admin/
index.php
etc ....
在此示例中,css 和 images 文件夹对于每个客户端站点都是唯一的,但所有其他文件对于所有站点都是通用的。不确定我们是否应该研究符号链接/NFS/其他内容?
答案1
短期解决方案:
移动
/admin/
index.php
etc...
比如说,/opt/cms
为文件创建到新位置的符号链接。即:
$ ln -s /home/user/admin /opt/cms/admin
$ ln -s /home/user/index.php /opt/cms/index.php
编写一个脚本来为所有文件和所有用户执行上述操作应该很简单(有经验的话)。如果不行,请单独发帖提问。
然后使用/opt/cms目录中的SVN,每个人都链接到该目录。
长期解决方案:
彻底消除用户目录。将应用程序移至一个单一的网站位置(/opt/cms 或 /var/www/cms 等)。使用某种 URL 重写来指向example.com/~user/images/*
并example/user/images/*
为/opt/cms/user/images
每个用户创建一个目录。此解决方案意味着用户不知道任何变化。
从长远来看,重写 CMS 以在后台存储差异,或者创建新结构并为用户提供新的 URL。
答案2
我不熟悉 Bespoke 的文件布局,但是您是否考虑过通过 svn:externals 属性来做到这一点?
它允许您将“外部”存储库链接到当前存储库内的位置。通过将 Bespoke 所在的中央存储库(对于您的组织来说是私有的,或者如果他们提供公共存储库)链接到您的所有项目存储库,它将使使用 SVN 推出一切变得轻而易举。
当您在存储库中某个位置运行 svn update 或 svn commit 时,更改将被拉取或推送到外部存储库并使所有内容保持同步。
svn:externals 仅支持 1.5 版之前的文件夹,因此请确保您使用的是 1.6 或更高版本,这样您才能将 index.php 之类的内容正确地链接到您的项目(除非定制文件可以放在一个目录中)。