Azure迁移咨询:仅同步TFS到DevOps变更工作项的方法
工作项迁移问题解答
问题1:能否仅针对已变更/出错的工作项重新运行迁移脚本以节省时间?
可以,有两种高效方式实现:
- 通过WIQL筛选特定工作项:在
WIQLQueryBit中添加变更时间或ID筛选条件,比如只筛选最近变更的工作项,或指定出错的工作项ID列表:"WIQLQueryBit": "AND [System.WorkItemType] = 'user story' AND ([System.Id] IN (72235, 12345) OR [System.ChangedDate] > '2024-05-01')" - 直接指定工作项ID:将
WorkItemIDs字段设为需要修正的工作项ID数组,替代WIQL筛选:"WorkItemIDs": [72235, 12345]
注意:若需要更新目标DevOps中已存在的工作项,需添加"UpdateExistingWorkItems": true字段(当前配置中缺失),否则FilterWorkItemsThatAlreadyExistInTarget: true会跳过已存在的工作项,无法完成修正。
问题2:是否存在自动修正DevOps与TFS间差异工作项的配置字段?
不存在能自动修正所有差异的通用字段,但针对你的迭代路径问题,可通过调整以下配置解决:
- 启用工作项更新功能:添加
"UpdateExistingWorkItems": true,允许脚本覆盖目标中已存在的工作项,修正迭代路径错误。 - 确保迭代路径自动创建:当前配置已开启
"ShouldCreateMissingRevisionPaths": true,该字段会在迁移时自动创建目标中缺失的迭代路径分支,避免因路径不存在导致的错误。 - 配置迭代路径映射:若TFS与DevOps的迭代路径结构不一致,需在
IterationMaps中添加路径映射规则,确保原路径正确映射到目标路径:"IterationMaps": { "原TFS项目\\迭代路径\\子项": "目标DevOps项目\\对应迭代路径\\子项" } - 关于
WorkItemPostProcessingContext:该字段并非用于修正工作项差异,它主要用于迁移后的自定义后置处理,对你当前的迭代路径问题无效。
修正后的配置示例(关键修改标注)
"Processors": [ { "$type": "WorkItemMigrationConfig", "Enabled": true, "ReplayRevisions": true, "PrefixProjectToNodes": true, "UpdateCreatedDate": true, "UpdateCreatedBy": true, "WIQLQueryBit": "AND [System.WorkItemType] = 'user story' AND [System.Id] = 72235", "WIQLOrderBit": "[System.ChangedDate] desc", "LinkMigration": true, "AttachmentMigration": true, "AttachmentWorkingPath": "c:\\temp\\WorkItemAttachmentWorkingFolder\\", "FixHtmlAttachmentLinks": true, "SkipToFinalRevisedWorkItemType": false, "WorkItemCreateRetryLimit": 5, "FilterWorkItemsThatAlreadyExistInTarget": true, "PauseAfterEachWorkItem": false, "AttachmentMaxSize": 480000000, "AttachRevisionHistory": false, "LinkMigrationSaveEachAsAdded": false, "GenerateMigrationComment": false, "WorkItemIDs": null, "MaxRevisions": 0, "NodeStructureEnricherEnabled": true, "UseCommonNodeStructureEnricherConfig": false, "ShouldCreateMissingRevisionPaths": true, "UpdateSourceReflectedWorkItemID": true, "NodeBasePaths": null, "AreaMaps": {}, "IterationMaps": {}, "MaxGracefulFailures": 0, "SkipRevisionWithInvalidIterationPath": false, "SkipRevisionWithInvalidAreaPath": false, "ShouldCreateNodesUpFront": true, "ReplicateAllExistingNodes": false, // 新增:允许更新已存在的工作项 "UpdateExistingWorkItems": true } ]
内容的提问来源于stack exchange,提问作者Sijith
相关产品推荐
相关产品推荐

