我正在开发一个包含多个模块(JSP、JS 和 CSS)的 Web 项目。
在为多个客户端分发应用程序时,从 SVN 的角度来看,最好的方法是什么,每个客户端都可以访问有限数量的模块,并且可以自定义每个页面的布局。
我正在开发一个包含多个模块(JSP、JS 和 CSS)的 Web 项目。
在为多个客户端分发应用程序时,从 SVN 的角度来看,最好的方法是什么,每个客户端都可以访问有限数量的模块,并且可以自定义每个页面的布局。
从一个在配置管理的沼泽和战壕中度过了几十年的人那里得到它:
对不起,大喊大叫,但我想警告你不要去那里。甚至不想去那里。分支意味着处理分支,它永远不会发生。它变得越来越难以维护,并且开始被忽视。让我们看看两种不同的策略:
哦,听起来很简单。我将创建一个基本项目,并在不同的客户分支上标记客户之间的差异。如果所有客户都有变化,我会把它放在基础分支上,然后合并到所有不同的客户分支上。还有什么比这更简单的?
我已经看到公司因为这种策略而倒闭。他们决定为客户创建自定义代码,因此他们为该客户分支然后,第二个客户需要自定义代码,他们为此分支。然后是第三个。现在,似乎客户端 #3 也需要对客户端 #1 进行更改。好吧,我们将从客户端 #1 合并到客户端 #3。等等,客户#2 也需要改变。好的,我们也将它合并到客户端#2。
但是,此功能现在在您的所有客户端中,但不在您的基本代码中。您的基本代码与您的客户所拥有的完全不同步。总有一天,您会将这些更改添加到该基本代码中并对其进行更新,但您永远不会这样做。相反,它变成了一个溃烂的提醒,你已经把它搞砸了。
每五年,你应该把你的源代码,通过粉碎机,然后重新开始。那是因为每五年,整个软件环境都会发生如此大的变化,以至于您的遗留代码成为您拖来走去的枷锁。如果您有一个项目,那么开始一个新项目也不会太糟糕。但是,您现在有六个客户和六个不同的项目。你不可能有资源把所有东西都放在一起。你已经把自己写进了一个虚拟的角落。
然而,竞争对手会来,他们将拥有最新最好的代码,他们会一个接一个地把你的客户拉走,直到他们都消失了,你的工作也是如此。我一遍又一遍地看到它。您必须不断创新,但是当您到处都有客户特定的代码时,这很难。
听起来很容易,如果你从来没有在你的生活中编程过。开发人员确切地知道这意味着什么:您需要从两个或三个单独的项目和/或分支中签出才能进行开发。其中一些组合会产生难以追踪的整洁而有趣的错误。您的持续构建服务器将为每个可能的组合带来工作机会。现在被认为是客户特定的代码是基础的,必须移动(尽管这可能永远不会发生)。
最后,根本不可能保持直线。您最终会得到在您的基础中应该是特定于客户端的代码,并且在您的客户端之间传播的基础代码。这与第一个场景非常相似,但您还添加了一个事实,即您的构建系统也是地狱。
那你该怎么办?
pom.xml
您的项目(它将有一个pom.xml
将所有内容联系在一起的项目。这是处理此问题的正确方法。90% 的编码都在初始设计中。其余 90% 正在维护中。分支创建更多维护,并鼓励您不必担心整体设计。如果没有必要,不要分支。
考虑到 css、js、.. 会影响应用程序的视图,可能为您拥有的每个客户创建一个分支是一个好主意。他们每个人都有自己的副本和主干供自己开发和推进
当使用 svn 时,分支很重,我建议使用
一个主要项目
每个客户一个项目(带有主干和分支)
这样您就可以更轻松地管理整个事情,而不会冒险将文件泄露给错误的客户,尤其是当客户开始要求您访问他的存储库时。
这当然取决于技术。在 java 中,我使用 maven 或 ant 任务将主项目包含为客户端项目使用的(混淆的)jar。