C# 在源代码管理中管理Visual Studio数据库设计器文件

C# 在源代码管理中管理Visual Studio数据库设计器文件,c#,visual-studio,version-control,mercurial,dvcs,C#,Visual Studio,Version Control,Mercurial,Dvcs,我正在从事一个使用VisualStudio的GUI DB设计器绘制数据访问层的项目 我使用mercurial作为我的风投,但这并不重要。每当我在一个分支中更改DB designer屏幕,然后在另一个分支中进行另一个更改,并尝试合并这两个分支时。。。我几乎总是会遇到非常复杂的合并冲突,即使手动处理DB设计器生成的.cs文件也很难解决 如何处理这一问题?分支/合并数据库差异在文本差异/合并工具中无法很好地工作。有像ERwin(请参阅)这样的特殊工具可以处理此问题,但这些工具非常昂贵,可能不容易集成到

我正在从事一个使用VisualStudio的GUI DB设计器绘制数据访问层的项目

我使用mercurial作为我的风投,但这并不重要。每当我在一个分支中更改DB designer屏幕,然后在另一个分支中进行另一个更改,并尝试合并这两个分支时。。。我几乎总是会遇到非常复杂的合并冲突,即使手动处理DB设计器生成的.cs文件也很难解决


如何处理这一问题?

分支/合并数据库差异在文本差异/合并工具中无法很好地工作。有像ERwin(请参阅)这样的特殊工具可以处理此问题,但这些工具非常昂贵,可能不容易集成到您的VCS中


我认为使用VisualStudioDB设计器时最好的选择是避免完全分支。或者不要使用数据库设计器设计数据库。最好为您的数据库提供一个或多或少简单的描述文件,并通过手写生成器从中生成所需的所有其他内容

我认为@Doc Brown答案是一个很好的答案,这是DVCSs的一个常见问题

考虑到DVCS的复制-修改-合并工作流,最好使用文本格式(如@Doc Brown所述),或者开发一个流程/约定,允许您将更改传达给团队的其他成员,这样在尝试更新/拉取时就不会互相干扰

处理二进制文件的能力与集中式VCS配合得很好,因为您在签出时锁定文件的能力(有时是有限的)(签出-修改签入工作流)

FWIW,这里有一个关于这个主题的精彩讨论


IMHO,VisualStudio应该以确定的方式输出设计器文件。例如,按类型、访问级别和名称对符号进行排序。这样,如果你做了一个改变,导致一个单一的属性被添加,整个该死的文件不会以不同的顺序被重写。。。如果这样做了,那么版本控制就不会有问题了。事实上,我的团队(我们也在使用Mercurial)基本上必须“锁定”我们的实体框架模型(通过口头交流),进行更改、提交和推送,然后“解锁”;允许其他人做出改变。合并非常困难…我将“designer文件”解释为为为许多事情生成的*.designer.cs或*.designer.vb文件。它们是文本,但合并起来仍然非常困难,因为一个简单的更改会导致整个文件以不同的方式重写。此外,这并不局限于分布式版本控制系统。它适用于任何版本控制系统。两个成员可以在Subversion中分别进行更改,一个成员仍然必须合并它们。@bamcciag-如果文件被锁定,两个人不能同时对其进行更改。如果文件被锁定,则有人无法完成其工作,最好回家。>\u>版本控制的全部要点(尤其是分布式版本控制;不能锁定文件是一项功能)是每个人都可以自由工作,而不会相互干扰。@bamciag-锁定是痛苦的。合并二进制文件(甚至是xml)也是如此。在工具方面没有一个很好的解决方案,但是如果您构建应用程序并使团队能够协调签入,那么锁定可能是最有效的解决方案。二进制文件通常不应该在源代码管理存储库中跟踪。如果文件的组织和格式合理,XML就可以很容易地合并。如果不是这样,那么就应该解雇某人(在本例中是微软)。