【问题标题】:TFS2010 Custom Build Activity : to Merge branchesTFS2010 自定义构建活动:合并分支
【发布时间】:2011-12-30 21:10:08
【问题描述】:

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

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

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;
}

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

【问题讨论】:

  • 您调用的是什么类型的构建? (门控、CI、滚动、手动)
  • 嗨。感谢您的回复。我正在运行手动构建。
  • 获取最新命令怎么样?
  • 使用不同的工作空间怎么样?
  • 嗨,爱德华,我尝试使用“workspace.Get(VersionSpec.Latest, GetOptions.GetAll);”作为我合并活动的最后一行。但是,它没有帮助。

标签: tfs tfs-2010


【解决方案1】:

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

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

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

【讨论】:

  • 嗨,正如你所建议的,我在合并活动后添加了 RevertWorkspace 然后 SyncWorkspace 活动。但是,它并没有帮助。
  • 嗨,感谢您的建议和努力。你能解释一下你的意思是什么“............同时你可以尝试使用以下方法,我绝对认为这是一种矫枉过正的方法:你已经签入,重做里面的所有步骤序列初始化工作区。“?我现在要做的是,在一个序列中,获取工作区、同步工作区和合并分支。你能解释一下吗?
  • Initialize Workspace 还包含清除上一个工作区的步骤。因此,您可以将构建运行到合并并签入合并的位置,然后再次初始化您的工作区并获取所有源代码中的最新版本。这应该包含您的签到。我认为这是矫枉过正,但它仍然应该工作。
猜你喜欢
  • 2012-04-29
  • 2018-05-29
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
相关资源
最近更新 更多