为多个客户分支一个项目

Branching a project for multiple customers

我们有一个项目有多个客户。假设应用程序名称是 Ali-Systems。 Foo公司会有Ali-Systems Foo,Bar公司会有Ali-Systems Bar等等。所有版本都具有几乎相同的结构。但他们的逻辑不同。例如,所有版本都有一个 BillIssue 方法,但其逻辑可能不同。无论是如何计算,甚至是他们的数据库模型之间的差异(我们使用 ASP.Net MVC Entity Framework)

据我了解,Microsoft 对一些分支策略进行了分类,例如开发隔离(这使得 下一个版本、实验或错误修复的并发开发),版本隔离(启用并发 发布管理)等

我可以为此目的利用分支吗?如何利用?或者我应该为每个客户的项目创建单独的存储库?

注意: 事实上,我想将一个项目的基础克隆到一些永远不会再次合并在一起的派生项目。但是我们必须能够向所有派生项目添加功能(可能在另一个分支的帮助下)

Microsoft 有 Visual Studio Team Foundation Server Branching and Merging Guide ,可以用来选择分支结构。包括 Main Only,Development isolation,Feature isolation,Release isolation,Servicing and Release isolation,Servicing, Hotfix, Release isolation...

在你的情况下,项目的核心是相似的,但每个公司都有自己的产品个性化(逻辑/数据库模型),并且可能在未来独立发展。

使用一些分支结构,主要限制是解决错误和全局更改的维护噩梦。

例如,如果您想将一家公司的变更合并到另一家公司是非常复杂的,需要分别重新测试每个版本。此外,对于错误跟踪,一个团队将解决他们版本中的错误,而另一个团队将不得不从他们不完全理解的版本中合并该更改。

To support such development scenario suggest to share extensible core and data model which will be configurable from upper customizable application layers. This core should be used as the base for each customer/company specific customization and maintained by separate team(for each company). It will include some management complication because multiple project managers may need resources from the same team but it is a good way to make architecture consistent, control the whole process and keep versions in sync.

此外,如果一个人或团队需要在本地机器上跨多个公司工作,保持本地环境清洁的一种方法是 Using multiple workspaces with Visual Studio