如何在源代码管理中管理多个开发人员更改的.vcproj文件?

时间:2020-03-06 15:04:27  来源:igfitidea点击:

我们使用Subversion作为源代码控制系统,并将VisualStudio项目文件(vcproj)存储在源代码控制系统中,就像我认为的正常情况一样。使用Subversion,我们不使用任何形式的文件锁定,因此,如果两个开发人员同时在同一个项目上工作并且都向该项目添加文件或者更改设置,则要提交的第二个开发人员必须合并更改。

我们如何合并这些更改?

vcproj文件只是文本文件,因此可以手动编辑它们,但是它们并不适合手动编辑,特别是对于初级开发人员而言。

我能想到的方法是

  • 从svn获取最新版本并手动重新添加所有本地更改
  • 手动编辑文件以解决自动合并中的所有冲突
  • 实现某种形式的锁定方案以防止同时更改
  • 开发人员之间要达成协议,以免他们同时进行更改

当前,我们正在使用第一个选项来手动重新添加所有更改,但这很耗时,我想知道是否有更好的方法。

对于源文件,自动合并功能在大多数情况下都有效,并且不会有很多冲突。

解决方案

我发现,只要我们使用的是出色的差异工具(我使用WinMerge),选项2(手动编辑文件)通常效果就很好。我遇到的主要问题是Visual Studio有时会重新排序文件。但是,如果我们有一个很好的差异/合并工具,那么它应该能够区分更改的内容和移动的内容。这可以有很大帮助。

我们使用差异工具(WinMerge)合并更改。项目文件(大多数情况下)是真正简单的XML。但是,这里的关键是,合并时绝不应该有任何意外,因为良好的沟通是有效的源代码控制的基础。

只要人们保持沟通,就可以同时进行项目的变更。

这是一个棘手的问题,我认为Visual Studio体系结构中的一个弱点。我们发现的方法是根本不在源代码管理中包含proj文件,而是拥有一个处理配置设置的构建脚本。

替代方案非常混乱,我们不能保证开发人员之间的一致构建或者环境。这导致了大量的下游集成问题,最终我们采取了严厉的步骤,从源代码管理中删除了项目文件。

开发人员环境仍然可能会错位,但是当他们尝试自己构建事物时就会出现。

在这里使用TFS,但我认为这没有什么不同。
我们也不会锁定,有时还必须处理合并项目文件。我从未发现它是如此复杂或者很多问题。我们很少遇到无法自动合并的问题,并且手动合并过程非常简单。

请注意以下几点:经常检查!如果我们对项目结构进行了重大更改,并且不立即进行检入,那么这些更改可能会增加以后合并的复杂性。如果我对项目的结构进行重大更改,我通常会引起大家的注意。我将请他们所有人检查他们当前的工作,然后亲自处理合并。

如果开发人员是初级用户,则选项1和2不能互斥,让他们使用选项1(重新获得项目文件并重新进行更改)(如果他们更喜欢)。对于更高级的开发人员,选项2(使用合并工具合并)非常好。

我认为这种情况目前还无法解决,有时合并是一种痛苦。

我们可能会发现"项目:合并"或者" SLN工具"文件很有用

我最近发现了这一点:http://www.codeproject.com/KB/macros/vcproj_formatter.aspx
如果在vcproj文件和修改后的版本上运行此工具,则可以使用自己喜欢的文本合并工具轻松地将它们合并在一起,此外,结果是更紧凑的vcproj文件。