我已经编写了一些c#代码,旨在自动执行相关tfvc分支之间的AzureDevOps合并,从而尝试使它们保持同步(不执行无基础的合并)。
这是通过依靠位于Microsoft.TeamFoundationServer.ExtendedClient
和Microsoft.TeamFoundationServer.Client
NuGet软件包中的客户端库来实现的。
代码在Microsoft.TeamFoundation.VersionControl.Client
内的Workspace类上使用“合并”方法:
GetStatus status = workspace.Merge(sourceBranch,
destinationBranch,
vsFromChangeset,
vsToChangeset,
LockLevel.None,
RecursionType.Full,
MergeOptions.None);
int numberOfConflicts = status.NumConflicts;
合并完成后,我检查“ GetStatus”对象上NumConflicts字段的状态,以确定是否发生了合并冲突。 如果确实如此,我将停止该过程,并且需要手动解决此特定的合并-即在Visual Studio中合并(我使用VS2017 Prof)。 这并不是什么大问题,因为从自动合并确实成功的时代获得的生产力就足够了。
我无法解释的奥秘是:
在大多数情况下,当客户端库合并表示合并冲突,然后通过Visual Studio完成合并时,Visual Studio会进行合并,而不会提及合并冲突。没问题。
在Visual Studio中,似乎似乎还有一个更高级别的“合并冲突解决逻辑”,使它能够执行比客户端库更高级的合并冲突解决类型? 但是我可能离这里很远?
也就是说,MergeOptions
枚举的用法(如here所述)对我来说还不是很清楚,所以也许这是引起头痛的原因。任何详细阐述该主题的资料都将不胜感激。 MergeOptions当前设置为 none ,并且在大多数情况下都适用。
有关导致此行为的原因的任何想法? 谢谢!
答案 0 :(得分:0)
通过更改Microsoft.TeamFoundation.VersionControl.Client.Workspace类的Merge方法中使用的mergeOptions参数,可以解决此问题。
在枚举Microsoft.TeamFoundation.VersionControl.Common.MergeOptionsEx上使用合并选项 代替,Microsoft.TeamFoundation.VersionControl.Client.MergeOptions替我解决了这个问题。
我现在已经看到80多个自动合并可以完美地工作,并且不再有以前的不稳定行为。 merge命令应如下所示:
GetStatus status = workspace.Merge(sourceBranch,
destinationBranch,
vsFromChangeset,
vsToChangeset,
LockLevel.None,
RecursionType.Full,
MergeOptionsEx.None);
因此,我的问题的答案就在无名英雄马里乌斯·斯考齐拉斯(Mariusz Skoczylas)的social.msdn post底部。非常感谢!
有关MergeOptionsEx的官方文档可以在here
中找到