使用ADO Migration Tool重迁已删目标工作项报TF237124错误怎么办
问题根因
你遇到的TF237124报错是ADO迁移工具的特性逻辑导致:首次迁移#67604工作项成功后,工具会自动在源端TFS的#67604工作项的Custom.ReflectedWorkItemId字段写入目标端生成的#217工作项标识,用来标记该工作项已完成迁移,避免重复创建。
当你从回收站恢复#217后,旧的ID对应工作项存在,工具可以正常更新,所以不会报错;你永久删除目标端#217后,源端存储的旧目标ID仍然存在,工具再次运行时会尝试用这个旧ID更新不存在的目标工作项,触发工作项保存校验失败。你在TFS界面找不到该字段是因为Custom.ReflectedWorkItemId是自定义字段,默认没有添加到工作项表单的可视区域,并非不存在。
解决步骤
步骤1:清空源端工作项的迁移标记字段值
不用修改工作项表单,直接调用TFS 2017 REST API修改单个工作项字段值即可,确保调用的账号对TEST1项目有工作项编辑权限:
- 调用POST接口:
http://[你的TFS源地址]/DefaultCollection/TEST1/_apis/wit/workitems/67604?api-version=4.1 - 请求头设置
Content-Type: application/json-patch+json - 请求体内容:
[ { "op": "replace", "path": "/fields/Custom.ReflectedWorkItemId", "value": "" } ]如果不会调用API,也可以用
witadmin命令行工具导出对应工作项类型定义,确认字段存在后,将字段临时添加到工作项表单,再通过界面清空值即可。- 调用POST接口:
步骤2:清理迁移缓存
删除配置中指定的临时文件夹所有内容:
c:\temp\WorkItemAttachmentWorkingFolder\,避免工具读取旧的映射缓存。步骤3:重新运行迁移
无需修改现有配置,直接运行迁移工具即可,工具会识别#67604为未迁移工作项,在目标端重新创建新的工作项,不会再触发报错。
备用方案
如果不方便修改源端工作项字段值,可以临时修改配置文件的WorkItemMigrationConfig节点,将FilterWorkItemsThatAlreadyExistInTarget改为false,跑完本次迁移后再改回原值即可,该配置会强制工具跳过已迁移标记校验,直接创建新的工作项。
内容的提问来源于stack exchange,提问作者David CASBONNE

