如何在Azure DevOps中将旧Area Path下的所有Bug复制到新版本的Area Path?
嘿,这个需求我太熟了——很多团队在版本迭代时都会遇到要把旧版本Bug迁移到新版本Area Path的情况,Azure DevOps里有几种实用的方法,我给你详细说说:
方法一:Azure DevOps门户内的批量复制操作(适合少量Bug)
这是最直观的方式,不用写代码就能搞定:
- 第一步:打开你的项目,进入Boards > Queries,新建一个Flat list类型的查询,筛选条件设置为:工作项类型是
Bug,Area Path等于你要复制的旧路径 - 第二步:运行查询后,用
Ctrl+A选中所有目标Bug(或者手动勾选需要的) - 第三步:点击顶部菜单栏的Actions > Copy selected work items
- 第四步:在弹出的配置窗口里,把Area Path改成你的新版本路径,还可以根据需要调整状态、指派等其他字段,确认后点击「复制」即可
方法二:PowerShell脚本批量复制(适合大量Bug)
如果Bug数量几十上百个,手动操作效率太低,用脚本批量处理更省心:
- 首先安装Azure DevOps PowerShell模块,打开PowerShell执行:
Install-Module -Name Az.DevOps -Force -AllowClobber - 连接到你的Azure DevOps组织:
Connect-AzDevOps -OrganizationUrl "https://dev.azure.com/你的组织名称" -ProjectName "你的项目名称" - 执行复制脚本(记得替换占位符):
小贴士:# 配置参数 $oldAreaPath = "旧Area Path,比如MyApp/V1.0" $newAreaPath = "新Area Path,比如MyApp/V2.0" $projectName = "你的项目名称" # 查询旧路径下的所有Bug $targetBugs = Get-AzDevOpsWorkItem -Project $projectName -Query "SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'Bug' AND [System.AreaPath] = '$oldAreaPath'" # 逐个复制Bug到新路径 foreach ($bug in $targetBugs) { Copy-AzDevOpsWorkItem -WorkItemId $bug.Id -Project $projectName -AreaPath $newAreaPath -KeepLink $true Write-Host "已完成复制:Bug ID $($bug.Id)" }-KeepLink $true会在原Bug和复制后的新Bug之间创建链接,方便追踪关联关系,不需要的话可以改成$false
方法三:Azure DevOps REST API自定义处理(适合复杂需求)
如果需要更灵活的逻辑(比如只复制「Active」状态的Bug,或者批量修改多个字段),REST API是最佳选择:
- 第一步:先获取个人访问令牌(PAT):在Azure DevOps右上角头像→Personal access tokens,创建一个拥有「Work Items」读写权限的令牌
- 第二步:查询旧Area Path的Bug列表,发送GET请求:
请求体(JSON格式):GET https://dev.azure.com/{你的组织名}/{你的项目名}/_apis/wit/wiql?api-version=7.1-preview.2{ "query": "SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'Bug' AND [System.AreaPath] = '旧Area Path'" } - 第三步:遍历返回的Bug ID,发送复制请求(POST):
请求头添加:POST https://dev.azure.com/{你的组织名}/{你的项目名}/_apis/wit/workitems/${BugID}?api-version=7.1-preview.3Content-Type: application/json-patch+json,请求体示例:[ { "op": "add", "path": "/fields/System.AreaPath", "value": "新Area Path" }, // 可选:修改状态为New { "op": "add", "path": "/fields/System.State", "value": "New" } ]
注意事项
- 复制前建议先测试1-2个Bug,确保字段映射正确,不会遗漏附件、评论等关键信息
- 复制后的Bug是全新的工作项,原Bug不会被删除,若需归档原Bug,可在复制完成后批量修改其状态为「Closed」或「Resolved」
内容的提问来源于stack exchange,提问作者Yonatan Alshech
相关产品推荐
相关产品推荐

