version-control - 单个代码库多个网站

标签 version-control

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

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

每个网站都有不同的母版页和不同的用户控件 (.ascx),因此虽然网站背后的主要编码相同,但部分不同。

我们现在遇到的问题是,如果存在错误、功能更改或新功能,我们必须分别在所有站点中实现它(对于管理员站点和客户站点)。这开始让我们发疯,也意味着我们在实现更改时有很大的误差范围。

我曾考虑过使用 svn:externals 但这会变得困惑。

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

我认为一个很好的概述会说每个站点的标记完全不同(管理站点除外,这只是一个主题更改),但代码库是相同的。

管理此问题的最佳方法是什么,或者我们是否坚持做大量的复制和粘贴?

编辑

您希望明确哪些要点?

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

所以我需要“同步”文件和文件夹,例如在 app_code 中找到的文件和文件夹,但这里也有问题。

站点 1 和站点 2 可能完全相同,只是主题不同。
站点 3 也有不同的主题,但它也有一些仅此站点需要的定制代码,app_code 中的一些代码也与站点 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

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

Controls 文件夹是网站之间的大部分更改发生在 MasterPage 和所有其他用户控件中的位置。

最佳答案

几个月前,当我们开始对我们的网络应用程序进行重大重写时,我遇到了这个确切的问题。我们有两个不同版本的几乎相同的站点。后端代码 99% 相同,而 JavaScript、CSS 和其他前端代码则大不相同。我们将这两个站点放在同一个 SVN 存储库中的不同主干中,很快就变成了在它们之间复制和粘贴公共(public)代码的噩梦。由于文件的细微变化,修补和合并太痛苦而无用。

我们的解决方案既不是 SVN 相关的,也不是通用库的构建。相反,独立站点的概念是通过多个配置文件和 CSS、图像和语言资源文件的层次结构在单个代码库中定义的。特定于站点的功能由配置值启用。

每个站点都有一个唯一的名称(例如“foo”和“bar”),该名称是在运行时从 Web.config 文件中检索的。该名称用于确定加载哪个配置文件以及使用哪些客户端文件。该设置在 SVN 中为空白。它是由我们的部署脚本在复制到 Web 服务器时设置的。在我们的本地开发机器上,环境变量定义了我们要使用的站点。

站点特定文件的文件结构如下所示:

|- 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"

到目前为止,这对我们来说效果很好。向特定站点添加新功能就像将功能添加到我们的代码库一样简单,并且只为该站点启用它。

关于version-control - 单个代码库多个网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1530286/

相关文章:

version-control - 对 RTF 文档使用版本控制?

git - 如何修复断点文件中存在冲突的 Git merge ?

Eclipse SVN同步问题

database - 你应该如何从源代码控制构建你的数据库?

java - 在本地保存文档时,是否可以将本地 Word 文档编辑器上所做的编辑同步到其中央存储库文档(db 文档)?

java - 在 JDK8 存储库中进行更改

Git 分支 - 如何拥有一个没有子模块的干净发布分支

version-control - 广告素材用于版本控制

Git Sourcetree Master 2 落后

version-control - 我应该将二进制 Assets 保存在 TFS 下吗?如何?