2011-05-18 91 views
1

我正在使用Visual Studio的GUI DB设计器绘制数据访问层的项目。在源代码管理中管理Visual Studio数据库设计器文件

我使用mercurial作为我的VCS,但它不应该太重要。每当我在一个分支中更改数据库设计器屏幕,然后在另一个分支中进行另一个更改,并试图合并这两个分支时......我几乎总是会得到非常复杂的合并冲突,即使通过手工操作也很难弄清楚数据库设计人员生成的.cs文件。

你如何处理这个问题?

+1

恕我直言,Visual Studio应该以确定性的方式输出设计器文件。例如,按类型,访问级别和名称对符号进行排序。通过这种方式,如果您进行的更改会导致添加单个属性,那么整个该死的文件不会以不同的顺序重写......如果这样做了,那么版本控制就不会有问题。事实上,我的团队(我们也使用Mercurial)基本上必须“锁定”我们的实体框架模型(通过口头交流),进行修改,提交并推送,然后“解锁”它们;允许其他人进行更改。这是非常困难的合并... – bambams 2011-09-30 20:42:57

回答

1

分支/合并数据库差异不适用于文本差异/合并工具。有像ERwin这样的特殊工具(见http://erwin.com/)可以处理这些工具,但这些工具很昂贵,并且可能不易于集成到VCS中。

我认为使用Visual Studio DB设计器时最好的选择是避免完全分支。或者不要使用数据库设计器来设计您的数据库。最好有一个或多或少简单的描述文件为您的数据库,并通过手写生成器生成您需要的一切。

+1

最好的选择是微软修复他们该死的代码生成器... – bambams 2011-09-30 20:49:17

1

我认为@doc布朗的回答是很大的,这是DVCSs

给出一个DVCS的复制 - 修改 - 合并工作流程的一个常见问题,你会更好使用文本格式(如@Doc Brown所述),或者开发一个流程/约定,允许您将更改传达给团队的其他成员,以便在尝试更新/拉取时不会彼此接触。

处理二进制文件的能力与集中式VCS一起使用效果很好,因为您在签出(签出 - 修改 - 签入工作流程)时具有锁定文件的能力(有时是有限的)。

FWIW,这是一个关于SO主题的大讨论。

Binary Files in DVCS

+0

我将“设计器文件”解释为* .designer.cs或* .designer.vb文件,它是为事物的数量。它们是文本,但它们仍然非常难以合并,因为简单的更改会导致整个文件以不同的方式重写。另外,这不限于分布式版本控制系统。它适用于任何版本控制系统。两名成员可以在Subversion中进行单独更改,但仍然需要合并它们。 – bambams 2011-09-30 20:48:40

+0

@bamcciag - 如果文件被锁定,两个人不能同时进行更改。 – 2011-09-30 21:55:12

+0

如果文件被锁定,有人不能完成他们的工作,不如回家。 > _>版本控制(特别是分布式版本控制;不能锁定文件是一项功能)的全部重点是人人都可以自由工作而不会互相干扰。 – bambams 2011-10-25 15:09:16

相关问题