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

如何为已删除迭代创建映射?TFS项目迁移遇TF237124错误求助

问题

我正尝试将基于XML的旧项目迁移至采用继承流程的新集合,迁移核心配置如下:

[...]
"Source": {
"Project": "Project",
[...]
},
"Target": {
"Project": "Test",
[...]
},
"Processors": [
  {
    "$type": "WorkItemMigrationConfig",
    "Enabled": true,
    "ReplayRevisions": true,
    "PrefixProjectToNodes": false,
    "MaxRevisions": 0,
    "StopMigrationOnMissingAreaIterationNodes": false,
    "AreaMaps": {},
    "IterationMaps": {},
    "SkipRevisionWithInvalidIterationPath": false,
    "SkipRevisionWithInvalidAreaPath": false
    [...]
  }
],
"Version": "13.0",
[...]

验证数据时发现团队已删除部分迭代,修订记录中显示「(removed iteration path)」,这些迭代未在源项目中存在,因此不会在目标项目自动创建。已知手动添加缺失迭代再删除的方法,但希望通过映射解决。

迁移日志显示:

!! There are 13 IterationPaths found in the history of the Source that are missing from the Target. These MUST be added or mapped with a fieldMap before we can continue.
MISSING Iteration: Test\Phase 2 - Sprint 2
[...]
ValidateTargetNodesExist::StopMigrationOnMissingAreaIterationNodes:False

尝试两种配置均无效,仍出现TF237124错误:

  1. 配置FieldMap(同时尝试原始值和日志中缺失值):
{
  "$type": "FieldValueMapConfig",
  "WorkItemTypeName": "*",
  "sourceField": "System.IterationPath",
  "targetField": "System.IterationPath",
  "defaultValue": "",
  "valueMapping": {
    "Project\\Phase 2 - Sprint 2": "Test\\Phase 2",
    "Test\\Phase 2 - Sprint 2": "Test\\Phase 2",
  }
}
  1. 在处理器中配置IterationMaps:
"IterationMaps": {
    "Project\\\\Phase 2 - Sprint 2": "Test\\Phase 2",
    "Test\\\\Phase 2 - Sprint 2": "Test\\Phase 2",
  }

因这些修订中除迭代路径外还有其他变更,不愿设置SkipRevisionWithInvalidIterationPath为true,请问配置错误在哪里?是否有适用处理器解决此问题?


解决方案

一、配置错误点

  1. IterationMaps转义格式错误:JSON中单个反斜杠仅需转义一次,你用了双转义Project\\\\Phase 2 - Sprint 2,这会导致工具无法匹配到正确的源迭代路径。
  2. 映射键的取值错误:日志中显示的Test\Phase 2 - Sprint 2是工具对已删除迭代的显示文本,并非源项目中实际存储的迭代路径,源路径应该是Project\Phase 2 - Sprint 2,用显示文本作为映射键无法匹配。
  3. FieldMap生效时机问题:工具会先执行迭代节点验证逻辑,再处理字段映射。当检测到源迭代在目标不存在时,会直接触发错误,不会进入字段映射环节,因此单独配置FieldMap无法绕过节点验证。

二、正确配置方式

方式1:修正IterationMaps配置

直接在WorkItemMigrationConfig的IterationMaps中配置正确的单转义路径,确保键为源项目的原始迭代路径,值为目标项目已存在的迭代路径:

"IterationMaps": {
  "Project\\Phase 2 - Sprint 2": "Test\\Phase 2",
  // 所有日志中提到的缺失迭代都需按此格式添加映射
}

注意:保持StopMigrationOnMissingAreaIterationNodes为false,且所有缺失迭代都必须配置映射,才能消除错误。

方式2:用NodeStructuresMigrationConfig批量处理已删除迭代

如果有大量已删除迭代需要处理,可添加NodeStructuresMigrationConfig处理器,先强制迁移源项目中所有迭代(包括已删除的),再通过映射重定向到目标现有路径:

"Processors": [
  {
    "$type": "NodeStructuresMigrationConfig",
    "Enabled": true,
    "PrefixProjectToNodes": false,
    "SourceProject": "Project",
    "TargetProject": "Test",
    "MigrateDeletedNodes": true, // 核心:启用已删除节点迁移
    "IterationMaps": {
      "Project\\Phase 2 - Sprint 2": "Test\\Phase 2"
    }
  },
  // 原有WorkItemMigrationConfig处理器
  {
    "$type": "WorkItemMigrationConfig",
    // 你的原有配置...
    "IterationMaps": {
      "Project\\Phase 2 - Sprint 2": "Test\\Phase 2"
    }
  }
]

该处理器会先完成迭代结构的迁移与映射,避免手动创建迭代的麻烦。

三、关键注意事项

  • 所有映射的目标迭代必须在目标项目中已存在,否则会触发新的路径不存在错误。
  • 检查日志中所有缺失的迭代,确保没有遗漏映射项。

内容的提问来源于stack exchange,提问作者Sukram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:05:03