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