整合CMS文件在一个地方

我们有一个系统,在我们的一台服务器上使用定制的CMS。 这个CMS被30-40个客户使用。 每个客户端CMS的大部分文件都是相同的(除了几个文件夹),因为每当我们添加一个新的function/补丁/错误修复程序时,我们都会将其发送给所有客户端。 我们希望将这些文件合并到一个地方,以便我们可以更轻松地从SVN部署我们的更改。

我们为每个用户帐户都有这样的结构:

/home/user/public_html/css/ /images/ /admin/ index.php etc .... 

在这个例子中,css和images文件夹对于每个客户端站点都是唯一的,但所有其他文件对于所有的文件都是通用的。 不知道我们是否应该查看符号链接/ NFS /其他?

短期解决scheme:

移动

 /admin/ index.php etc... 

比如说, /opt/cms

创build文件的sym-links到新的位置。 即:

 $ ln -s /home/user/admin /opt/cms/admin $ ln -s /home/user/index.php /opt/cms/index.php 

写一个脚本来做所有的文件和所有的用户应该是微不足道的(有经验)。 如果不是,请发表一个单独的问题。

然后在/ opt / cms目录中使用SVN,这个目录由每个人链接。

长期解决scheme:

完全消除用户目录。 将应用程序移到单个网站位置(/ opt / cms或/ var / www / cms等)。 使用某种URL重写来使example.com/~user/images/*指向example/user/images/*并为每个用户创build一个/opt/cms/user/images目录。 这个解决scheme意味着用户不知道任何改变。

长远来说,重新编写CMS来存储幕后的差异,或者创build一个新的结构并给用户一个新的URL。

我不熟悉Bespoke的文件格式,但你有没有想过通过svn:externals属性来做这件事?

它允许您将“外部”存储库链接到当前存储库中的某个位置。 通过拥有一个中心存储库,其中定制链接到所有项目存储库的定制(专用于您的组织,或公共回购,如果他们提供的),它将使SVN一触即发。

当你在你的仓库中的一个仓库里运行svn update或者svn commit的时候,这些改变将会被拖拽或者转移到外部仓库,并且保持一切同步。

svn:externals只支持1.5版之前的文件夹,所以要确保你的版本是1.6或者更高,这样你可以像index.php那样正确地链接到你的项目(除非bespokes文件可以放在一个目录中)。