2

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

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

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. 还是行不通。

4

1 回答 1

0

我的猜测是 aSyncWorkspace应该是唯一要做的事情。
你可以尝试RevertWorkspace在那之前做一个。

编辑
在您现在声明即使这样也行不通之后,我至少会针对 MS 生成一个错误以获得官方答案。
同时,您可以尝试以下方法,我绝对认为这是一种矫枉过正的方法:一旦您签入,重做序列中的所有步骤Initialize Workspace

如果即使这样也不起作用,我会考虑两种不同的构建,一种用于合并,另一种用于实际构建。然后,您可以组织一个方案,您的第一个构建一旦完成,就会触发第二个构建。是一个很好的资源。

于 2011-11-17T10:36:29.817 回答