Version control 单代码库多网站

Version control 单代码库多网站,version-control,Version Control,我们开发了一个使用单一代码库的系统,由四个Visual Studio项目组成,其中包括一个管理网站和面向客户的网站(每个系统都有自己的MS SQL数据库) 这一直很有效,因为所有新网站(包括管理员)都引用了SVN中相同的代码库项目,因此对代码库所做的任何更改都可用于所有网站 每个网站都有不同的母版页和不同的用户控件(.ascx),因此部分不同,尽管网站背后的主代码相同 我们现在面临的问题是,如果存在bug、功能更改或新功能,我们必须在所有站点中分别实施(对于管理员和客户站点)。这开始让我们发疯,

我们开发了一个使用单一代码库的系统,由四个Visual Studio项目组成,其中包括一个管理网站和面向客户的网站(每个系统都有自己的MS SQL数据库)

这一直很有效,因为所有新网站(包括管理员)都引用了SVN中相同的代码库项目,因此对代码库所做的任何更改都可用于所有网站

每个网站都有不同的母版页和不同的用户控件(.ascx),因此部分不同,尽管网站背后的主代码相同

我们现在面临的问题是,如果存在bug、功能更改或新功能,我们必须在所有站点中分别实施(对于管理员和客户站点)。这开始让我们发疯,也意味着我们在实施变革时有巨大的误差空间

我曾考虑过使用svn:externals,但这会变得很混乱

从主网站和主管理系统分支可能是一种选择,但合并以获得新代码是一个主要问题,因为这些网站并不完全相同

我认为一个很好的概述应该是,每个站点的标记是完全不同的(除了管理员站点,这只是一个主题更改),但是代码基础是相同的

管理这一点的最佳方法是什么?还是我们一直在做大量的复制和粘贴

编辑 您希望澄清哪些要点

出现的问题包括页面JavaScript不同,网站之间的HTML布局可能完全不同。但是页面的代码是相同的

因此,我需要“同步”文件和文件夹,比如那些在app_代码中找到的文件和文件夹,但这里也有问题

站点1和站点2可能完全相同,只是主题不同。 站点3也有一个不同的主题,但它也有一些定制的代码,这是该站点唯一需要的,app_代码中的一些代码与站点1和站点2的行为也不同

现在我可以很容易地通过分支实现这一点,但是当合并到新的分支时,如果存在代码差异,那么就会出现重大冲突

合并也会成为一项庞大的任务,而且耗时太长,因为我们只需要合并某些文件夹和文件,尽管您无法通过分支合并单个文件(这可能是错误的)

例如:

根目录中有一个download.aspx,它返回一个流作为响应,而不是一个页面,用于通过系统推送所有下载请求

因此,站点1和站点2中的这个页面是相同的,但在站点3中,它做了其他站点不需要的额外工作

我们不希望这个定制功能成为一个过载,因为我们不希望/不需要它的其他网站,我们现在不能再合并这个文件,从主网站,它必须手动合并

希望这能更好地解释我想要实现的目标

编辑2 基本站点结构

|- App_code
|- App_Themes
|- Bin
|- Content
|     |- Flash
|     |- Images
|     |- Scripts
|     |- Uploaded
|
|- Controls
|     |- MasterPage
|     |     |-MasterPageControls
|     |
|     |- Navigation
|     |- Search
|     |- Templates
|     |     |- Control Templates 
|     |     |- Page Templates
|     |
|     |- WebServices
|     
|- Errors
|
导航、搜索、模板下的所有控件都是.ascx文件

根目录中有几个文件,包括default.aspx、download.aspx和preview.aspx

这些是网站的主要页面(忽略错误页面),所有页面都是从数据库动态创建的


“控件”文件夹是主页和所有其他用户控件中网站之间大部分更改发生的地方。

我不确定我是否正确理解您的情况,但您可以在第4章中找到如何维护SVN存储库的线索

似乎您要么必须为SVN树建立良好的例程,要么必须更改代码,以便尽可能多地为所有web站点所共有,并且差异是可配置的。例如,您可以使用站点无关代码创建一个主项目,然后将更改编码为在其上构建的项目


至于站点本身的更新,这必须通过与subversion树中的相应点同步来完成,或者您必须执行新的发布(或升级)

您说您有一个SVN回购协议,其中包含所有站点的代码库。所以,除非我有误解,否则您不能简单地将任何共享组件移动到该存储库中吗

在可能的情况下,您提到的页面内Javascript之类的内容应该是外部的。如果HTML布局完全不同,Javascript可能会有很大的不同

因此,站点1和站点2中的这个页面是相同的,但在站点3中,它做了其他站点不需要的额外工作。我们不希望这个定制功能成为一个过载,因为我们不希望/不需要它的其他网站


你不能在站点3上扩展下载代码,所以你在所有站点上都有一个共同的基础,但在站点3上扩展它。

如果我正确理解这个问题,你在一个存储库中有四个大致相似的网站的代码。网站实例具有自定义功能。原始帖子中的妙语“问题”表达了对“大量复制和粘贴”的担忧。在不同点上,你表示对“合并”和“手动合并”感到沮丧

我认为您正在使用svn向四台主机分发新代码

也许您的代码库正在接近这样一个点:公共材料可以被认为是一个库。从这个角度来看,这四个网站中的每一个都被认为是从图书馆构建的应用程序。如果是这样的话,那么在subversion中为这四款应用提供各自的回购协议可能是有意义的。开发工作将是将公共特性与定制特性分开,也许会使“库”代码上的API定义得更清晰一些。然后,每个主机都会签出库代码和自己的应用程序


这和你想的很接近吗

像其他人一样,我对你的问题有点困惑,但我确实认为我有一个大致的理解
|- Config
|     |- AppSettings.foo.config      <- overrides Web.config AppSettings for "foo" site
|     |- AppSettings.bar.config      <- overrides Web.config AppSettings for "bar" site
|- Content
|     |- CSS
|          |- main.css               <- default CSS file for all sites
|          |- main.foo.css           <- CSS overrides for "foo" site
|     |- Images
|          |- logo.jpg               <- default logo
|          |- logo.foo.jpg           <- logo used if site name is "foo"
|          |- logo.bar.jpg           <- logo used if site name is "bar"