Azure DevOps中如何完整复制Feature-UserStory-Task层级的工作项树?
在Azure DevOps中复制完整工作项树(Feature-UserStory-Task)的解决方案
一、调整复制功能的层级深度设置
默认的「创建复制工作项」功能可能限制了层级抓取深度,你可以通过以下步骤修复:
- 打开目标Feature工作项,点击右上角的「...」菜单,选择「创建复制工作项」
- 在弹出的复制配置窗口中,找到「要包含的链接层级」选项,将默认的「1级」修改为「所有层级」
- 确认字段复制、链接保留等其他设置后,点击「创建」,此时就能连同Feature下的UserStory以及嵌套的Task一起完整复制
二、用PowerShell脚本实现批量层级复制(适合复杂场景)
如果图形界面设置后仍有遗漏,可以借助Azure DevOps REST API结合脚本实现精准的层级复制:
核心思路是递归遍历源Feature的所有子工作项(包括嵌套的Task),依次创建副本并重建父子链接关系。
示例核心脚本片段:
# 配置基础信息 $orgUrl = "https://dev.azure.com/你的组织名" $projectName = "你的项目名" $pat = "你的个人访问令牌(需含工作项读写权限)" $sourceFeatureId = 1234 # 要复制的源Feature ID # 初始化请求头 $headers = @{Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))} # 递归复制工作项树 function Copy-WorkItemHierarchy { param($sourceItem, $parentCopyId) # 创建当前工作项副本 $copyPayload = @( @{op = "add"; path = "/fields/System.Title"; value = "[复制] $($sourceItem.fields.'System.Title')"} # 可按需添加其他需要复制的字段,如描述、标签等 ) $newItem = Invoke-RestMethod -Uri "$orgUrl/$projectName/_apis/wit/workitems/`$($sourceItem.fields.'System.WorkItemType')?api-version=7.1-preview.3" -Method Post -Headers $headers -Body ($copyPayload | ConvertTo-Json) -ContentType "application/json-patch+json" # 与父副本建立链接 if ($parentCopyId) { $linkPayload = @( @{op = "add"; path = "/relations/-"; value = @{rel = "System.LinkTypes.Hierarchy-Reverse"; url = "$orgUrl/_apis/wit/workitems/$parentCopyId"}} ) Invoke-RestMethod -Uri "$orgUrl/$projectName/_apis/wit/workitems/$($newItem.id)?api-version=7.1-preview.3" -Method Patch -Headers $headers -Body ($linkPayload | ConvertTo-Json) -ContentType "application/json-patch+json" } # 递归处理子工作项 foreach ($relation in $sourceItem.relations) { if ($relation.rel -eq "System.LinkTypes.Hierarchy-Forward") { $childId = [int]($relation.url -split "/")[-1] $childItem = Invoke-RestMethod -Uri "$orgUrl/$projectName/_apis/wit/workitems/$childId?`$expand=relations&api-version=7.1-preview.3" -Headers $headers Copy-WorkItemHierarchy -sourceItem $childItem -parentCopyId $newItem.id } } } # 启动复制流程 $sourceFeature = Invoke-RestMethod -Uri "$orgUrl/$projectName/_apis/wit/workitems/$sourceFeatureId?`$expand=relations&api-version=7.1-preview.3" -Headers $headers Copy-WorkItemHierarchy -sourceItem $sourceFeature -parentCopyId $null
三、使用Azure DevOps市场扩展
如果不想编写脚本,可以在Azure DevOps市场中选择成熟的第三方扩展:
- Copy Work Items Batch:支持批量复制工作项及所有层级子项,可自定义字段、链接的复制规则
- Work Item Tree Copy:专门针对层级工作项复制的工具,操作界面直观,一键完成完整树复制
安装扩展后,按照指引选择目标Feature即可实现完整层级的复制。
内容的提问来源于stack exchange,提问作者neha
相关产品推荐
相关产品推荐

