强制TFS API合并使用源分支并忽略所有冲突

时间:2015-11-16 14:32:15

标签: c# api tfs tfs2013 branching-and-merging

我有一段C#代码可以自动执行某些TFS服务器(12.0.31101.0 Tfs2013.Update4)版本控制操作。 其中之一是从BranchA到BranchB的合并。 我想将BranchA用作“真相”,所有冲突都可以通过使用BranchA中的最新版本来解决。

目前我的合并如下:

GetStatus status = workspace.Merge(sourceBranch,
   destinationBranch,
   versionSpec,
   null,
   LockLevel.None,
   RecursionType.Full,
   MergeOptions.None);

然后我从状态对象中获取status.NumConflicts。

if (workspace.GetPendingChanges().Length > 0)
{
   if (conflictsFound)
   {
      ConsoleHelper.WriteLine(numberOfConflicts + " merge conflicts found! Conflicts will be resolved by using the source branch.", ConsoleColor.Cyan);
      Conflict[] objConflicts = workspace.QueryConflicts(new string[] { destinationBranch }, true);

      foreach (Conflict objConflict in objConflicts)
      {
         objConflict.Resolution = Resolution.AcceptTheirs;    //This will force the take source option
         workspace.ResolveConflict(objConflict);
         ConsoleHelper.WriteLine("File : " + objConflict.YourServerItemSource, ConsoleColor.Gray);
      }
         ConsoleHelper.WriteLine("All merge conflicts encountered were resolved.", ConsoleColor.Green);
   }
   TFSCommit tfsCommit = new TFSCommit();
   checkinStatus = tfsCommit.CheckIn(workspace, workItem, out checkinChangeSet);
}

然后我遍历Conflicts对象并使用Resolution.AcceptTheirs选项。 在测试环境中,这工作正常,但我现在碰到TF14121:

失败代码:

  

MergeEditDeleteException |消息: TF14121 :先前对$ / Development / Dictionaries / FileA.dict进行的尚未合并的更改将通过合并删除$ / Development / Dictionaries / FileA.dict来丢弃。

我正试图找到一种方法来告诉API“忽略”冲突并使用BranchA作为源。

有解决方法吗?

2 个答案:

答案 0 :(得分:1)

所以我找到了问题的根源。在我的代码中,我根据GetStatus对象的NumFailures属性中的结果确定了合并的成功。 我完全像Vicky所说的创建了这个场景,这确实触发了TF14121 - 再次感谢@Vicky!事实证明这确实是一个警告,仅此而已。

enter image description here

有趣的是,当触发TF14121时,它在GetStatus对象(A)中被注册为失败(B)。但是,当您检查GetStatus对象中的失败集合并查看失败的Severity属性(C)时,您将看到它的类型为 SeverityType.Warning 。如果您继续办理登机手续,它可以正常工作。

最重要的是,仅查看status.NumFailures以确定是否存在故障,可能不是最佳方式。

答案 1 :(得分:0)

TF14121消息出现在以下情况中:在您的方案中(从BranchA合并到BranchB),首先在BranchA中对 FileA.dict 进行了一些更改并且已签入,名为的变更集例如生成C5;然后删除并签入 FileA.dict 文件,生成名为C6的变更集。现在,当从BranchA合并到BranchB时,将显示TF14121警告消息。

您可以先取消删除FileA.dict文件并再次合并。如果您仍希望在合并期间删除FileA.dict文件,则需要处理此异常,并检查合并挂起的更改:

 workspace.CheckIn(workspace.GetPendingChanges(), "Branch Merge Checkin");