如何为已删除迭代创建映射?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错误:
- 配置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", } }
- 在处理器中配置IterationMaps:
"IterationMaps": { "Project\\\\Phase 2 - Sprint 2": "Test\\Phase 2", "Test\\\\Phase 2 - Sprint 2": "Test\\Phase 2", }
因这些修订中除迭代路径外还有其他变更,不愿设置SkipRevisionWithInvalidIterationPath为true,请问配置错误在哪里?是否有适用处理器解决此问题?
解决方案
一、配置错误点
- IterationMaps转义格式错误:JSON中单个反斜杠仅需转义一次,你用了双转义
Project\\\\Phase 2 - Sprint 2,这会导致工具无法匹配到正确的源迭代路径。 - 映射键的取值错误:日志中显示的
Test\Phase 2 - Sprint 2是工具对已删除迭代的显示文本,并非源项目中实际存储的迭代路径,源路径应该是Project\Phase 2 - Sprint 2,用显示文本作为映射键无法匹配。 - 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
相关产品推荐
相关产品推荐

