gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:56:18 26 4
gpt4 key购买 nike

我们开发了一个使用单一代码库的系统,由四个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com