用于客户端分发的SVN结构

时间:2012-06-12 09:14:29

标签: java javascript html svn tortoisesvn

我正在开发一个包含多个模块(JSP,JS和CSS)的Web项目。

在为多个客户分发应用程序时,从SVN的角度来看,最好的方法是什么,其中每个客户端都可以访问限制数量的模块,并可以自定义每个页面的布局。

3 个答案:

答案 0 :(得分:2)

从一个在配置管理的沼泽和战壕中度过几十年的人那里拿走它:

不要使用分支

对不起喊叫,但我想警告你不要去那儿。甚至不去考虑去那里。分支意味着处理分支,它永远不会发生。它变得越来越难以维护,并开始被忽视。让我们看看两种不同的策略:

按客户分支

哦,听起来很简单。我将创建一个基本项目,并在不同的客户分支上标记客户之间的差异。如果所有客户都有变更,我会将其放在基础分支上并将其合并到所有不同的客户分支机构。什么可以更简单?

由于这种策略,我看到公司倒闭了。他们决定为客户创建自定义代码,因此他们为该客户端分支然后,第二个客户需要自定义代码,然后他们为此分支。然后是第三个。现在,客户端#3似乎也需要对客户端#1进行更改。好吧,我们将该更改从客户端#1合并到客户端#3。等等,客户#2也需要改变。好的,我们也将它合并到Client#2。

但是,此功能现在在您的所有客户端,但不是您的基本代码。您的基本代码与您的客户完全不同步。有一天,您将这些更改纳入基本代码并进行更新,但您永远不会这样做。相反,它变成了一个恶化的提醒,你已经吹了它。

每隔五年,您应该获取源代码,通过粉碎机重新开始。这是因为每五年一次,整个软件环境都发生了巨大的变化,以至于您的遗留代码成为您拖延的枷锁。如果您有一个项目,那么启动一个新项目就不会太糟糕。但是,您现在有六个客户和六个不同的项目。你没有办法把所有东西都拉到一起。你已经把自己写进虚拟角落。

然而,竞争对手会来,他们会拥有最新最好的代码,他们会逐一吸引客户,直到他们全部消失,你的工作也是如此。我一遍又一遍地看到它。你必须不断创新,但是当你到处都有客户特定的代码时,这很难。

保留核心代码并仅分支特定客户资料

如果你从未在你的生活中编程,那听起来很容易。开发人员确切地知道这意味着什么:您需要从两个或三个单独的项目和/或分支机构签出以进行开发。其中一些组合将创建难以追踪的整洁有趣的错误。您可以为每个可能的组合创建连续构建服务器。现在被视为客户特定的代码是基础,必须移动(尽管可能永远不会发生)。

最后,根本不可能保持直线。您最终将得到的代码应该是客户特定的基础代码,并且基本代码会在您的客户端之间传播。它与第一种情况非常相似,但您还添加了构建系统也是地狱的事实。


那你该怎么办?

  • 首先,使用Maven。我不是Maven的忠实粉丝,但它有很多东西。
    • Maven告诉你如何把所有东西都放好。你把你的源码放在这里,你把你的JSP放在这里。没有人可以争论它,因为Maven这么说。你可能不同意,但你不能争辩。 Maven会让你把每个罐子或战争作为一个单独的子项目与它自己的pom.xml一起放到你的项目中(它将有一个pom.xml将所有东西联系在一起。正确的处理方法。
    • Maven有一种处理依赖关系的内置方式。这不仅适用于第三方罐子,但对于罐子,您可以生产多个项目使用的罐子。创建一个本地Maven存储库并使用它。
    • 不知道Maven?学习它。了解它,就好像你的工资取决于它,因为它确实如此。对于Java开发人员而言,了解Maven每年的价值大约为20,000美元。是的,知道Maven的开发者可以获得更多的报酬 - 大众捷达和奥迪A6之间的区别。
  • 创建统一版本并使用配置记录来确定客户端应该看到的内容。如果客户#1需要功能" A",而客户#2需要功能" B",您将A和B都放在您的代码中,并有一个配置记录确定哪个功能客户见。这样做的目的是让你在编码之前思考。检查客户特定分支并进行黑客攻击非常容易。但是,如果您有十几个客户端并且只有一个代码库,则无法执行此操作。你开始寻找和看到共性,也许更好的方法来处理这种情况。你最终得到了更好的代码。
  • 将有客户特定代码。在这种情况下,为自定义JSP屏幕之类的内容创建一个目录。尽量将此保持在最低限度,并使用Perl或Python脚本来帮助构建客户端特定的布局。实际上,使用单个集中式脚本,并提出配置方案来处理构建客户端差异。它会让您更容易看到差异。
  • 为所有客户端制作单个版本,并设置您的服务器,因此特定于客户端的配置不会被新版本覆盖。这使得发布更容易,更不容易出错。

90%的编码在初始设计中。另外90%正在进行维护。分支机构可以创造更多维护,并鼓励您不必担心整体设计。如果你不必,不要分支。

答案 1 :(得分:0)

考虑到css,js,..可能会影响应用程序的视图,可能为每个客户创建一个分支是个好主意。他们每个人都有自己的副本和行李箱供自己开发和推进

答案 2 :(得分:0)

当使用svn时,分支很重,我建议使用

  • 一个主要项目

  • 每个客户一个项目(带有主干和分支机构)

通过这种方式,您可以更轻松地管理整个事情,而不会将文件泄漏到错误的客户端,尤其是当客户端开始要求您访问其存储库时。

这取决于技术当然。在java中,我使用maven或ant任务将主项目包含为客户端项目使用的(混淆)jar。