You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移含已删除团队项目引用的WorkItem,如何保留完整修订历史?

解决VstsSyncMigrator迁移含已删除项目引用WorkItem的完整修订历史问题

遇到这个问题的核心原因是:迁移工具在加载WorkItem的旧修订记录时,尝试引用已经被删除的团队项目ID,触发了TF26192异常。要在保留完整有效修订历史的前提下解决,有以下几种可行方案:

方案1:修改VstsSyncMigrator源代码,添加异常捕获处理

这是最直接的自定义解决方案,针对报错的核心逻辑做调整:

  1. 克隆VstsSyncMigrator的官方源代码到本地
  2. 打开src/VstsSyncMigrator.Core/Execution/ComponentContext/WorkItemStoreContext.cs文件,定位到GetRevision方法(对应报错信息里的line 202)
  3. 在实例化特定修订的WorkItem时,添加异常捕获逻辑,跳过无效修订:
public WorkItem GetRevision(WorkItem workItem, int revision)
{
    try
    {
        return new WorkItem(_store, workItem.Id, revision);
    }
    catch (Microsoft.TeamFoundation.WorkItemTracking.Client.DeniedOrNotExistException ex)
    {
        if (ex.Message.Contains("TF26192"))
        {
            _logger.LogWarning($"Skipping revision {revision} for work item {workItem.Id}: 引用的团队项目已不存在(TF26192)。");
            return null;
        }
        // 非目标异常重新抛出
        throw;
    }
}
  1. 打开src/VstsSyncMigrator.Core/Execution/MigrationContext/WorkItemMigrationContext.cs文件,找到ReplayRevisions方法,在处理修订前添加null检查:
// 在循环处理修订的逻辑中添加
var sourceRevision = sourceStore.GetRevision(sourceWorkItem, current);
if (sourceRevision == null)
{
    current++;
    continue;
}
  1. 重新编译项目,使用自定义编译后的工具执行迁移

修改后,工具会自动跳过那些引用已删除项目的无效修订,同时完整保留其他所有有效修订的历史记录。

方案2:临时恢复已删除的团队项目(如果条件允许)

如果源组织中被删除的项目还在30天的恢复窗口期内,可以采用这个零代码方案:

  • 登录Azure DevOps源组织,进入项目设置 > 项目
  • 在「已删除项目」列表中找到ID为129的项目,点击恢复
  • 完成WorkItem迁移后,再重新删除该项目

这个方法无需修改代码,但依赖于项目仍处于可恢复周期内,适合临时快速解决问题。

方案3:自定义迁移处理器(进阶方案)

如果不想修改官方工具的源代码,可以创建自定义的WorkItem迁移处理器:

  • 继承官方的WorkItemMigrationContext类
  • 重写GetRevision和ReplayRevisions方法,实现方案1中的异常处理逻辑
  • 在迁移配置文件中,将ObjectType替换为自定义处理器的类型路径

注意事项

  • 方案1修改代码后,需要维护自定义版本的迁移工具,后续官方更新时需要手动合并代码
  • 跳过无效修订属于折中方案,迁移后的WorkItem历史会缺失那些关联已删除项目的修订,但其余完整修订会被保留,这是无法恢复原项目情况下的最优选择

内容的提问来源于stack exchange,提问作者João Macedo Pinto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:12:30