TFS2010自定义构建活动:合并分支

时间:2011-11-16 22:41:07

标签: tfs2010

我正在定制我们的构建活动。我想帮你解决一个问题。

以下是我们的版本控制层次结构。

Main
 |- Dev
 |- QA

我们正在开发Dev分支,在进行构建时,我们需要将Dev分支合并到Main然后合并到QA。  您可能知道Main是根分支。

在我们的构建模板中,我添加了两个自定义活动,将一个从Dev合并到Main,另一个从Main合并到QA。以下是自定义活动的代码。

protected override string Execute(CodeActivityContext context)
{
   string lstrStatus = string.Empty;

   string lstrSourceBranchPath = context.GetValue(this.SourceBranchPath);
   string lstrTargetBranchPath = context.GetValue(this.TargetBranchPath);

   // Obtain the runtime value of the input arguments
   Workspace workspace = context.GetValue(this.Workspace);

   GetStatus status = workspace.Merge(lstrSourceBranchPath,
             lstrTargetBranchPath,
             null,
             null,
             LockLevel.None,
             RecursionType.Full,
             MergeOptions.None);

   // resolve the conflicts, if any

   if (status.NumConflicts > 0)
   {
      Conflict[] conflicts = workspace.QueryConflicts(new string[]
                             { lstrTargetBranchPath }, true);

      foreach (Conflict conflict in conflicts)
      {
         conflict.Resolution = Resolution.AcceptTheirs;
         workspace.ResolveConflict(conflict);
      }
   }

   // checkin the changes
   PendingChange[] pendingChanges = workspace.GetPendingChanges();
   if (pendingChanges != null && pendingChanges.Length > 0)
   {
      workspace.CheckIn(pendingChanges, "Merged by MERGE BRANCHES activity");
   }
   return lstrStatus;
}

问题是,合并在服务器中完美发生。但是,它没有反映在本地文件夹中。我尝试在每个SyncWorkspace activity之后添加Merge custom activity。仍然没有工作。

1 个答案:

答案 0 :(得分:0)

我的猜测是SyncWorkspace应该是唯一要做的事情 您可以尝试在此之前执行RevertWorkspace

修改
在您现在声明即使这不起作用之后,我也会产生一个针对MS的错误,至少要获得正式答案 同时你可以尝试使用以下方法,我绝对认为这是一种矫枉过正:一旦你签到,重做序列Initialize Workspace内的所有步骤。

如果即使这样也行不通,我会考虑两种不同的构建方式,一种用于合并和构建的构建方式。一个做实际构建的人。然后,您可以组织一个方案,其中第一次构建一旦完成,就会触发第二个构建。 Here是一个很好的资源。