Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019 | TFS 2018

当你创建 拉取请求 (PR) 并指定必需/可选的审阅者时,Azure Repos 将通知审阅者你的 PR 已准备好接受评审。 所有必需的审阅者都必须批准 PR 中的更改,然后才能将更改合并到目标分支中。 对于更改 main 分支等关键分支的 PR,团队可能已经创建了 分支策略 来指定审阅者或要求最少数量的审阅者。 如果分支策略将可选审阅者添加到 PR,你可以保留、要求或删除他们。 如果分支策略将必需审阅者添加到 PR,你不能将其设为可选或删除。 有关通过分支策略分配审阅者的信息,请参阅 自动包括代码审阅者

如果正在评审一个 PR,请尝试给出准确且容易理解的建设性反馈。 有关查看反馈的详细信息,请参阅 拉取请求反馈 。 本文介绍如何在 Azure DevOps 中评审拉取请求。

只能使用浏览器在 Web 门户中评审 Azure DevOps PR。

本文介绍如何执行以下操作:

  • 跟踪已审阅的文件
  • 对 PR 更改进行投票
  • 完成 PR
  • 必须在 Azure DevOps 项目设置中启用 Repos。 如果 Repos 中心和关联页面未显示,请参阅 打开或关闭 Azure DevOps 服务 以重新启用 Repos。

  • 若要评审 PR,必须是 PR 所在的 Azure DevOps 项目的成员,具有基本访问级别或更高级别。

  • 如果没有项目,请创建一个或 免费注册

  • 如果你不是项目成员,请 添加为成员

    对于公共项目,被授予利益干系人访问权限的用户对 Azure Repos 具有完全访问权限。

  • 必须在 Azure DevOps 项目设置中启用 Repos。 如果 Repos 中心和关联页面未显示,请参阅 打开或关闭 Azure DevOps 服务 以重新启用 Repos。

  • 若要评审 PR,必须是 Azure DevOps 项目的成员,具有基本访问级别或更高级别。 如果你不是项目成员, 请添加为成员

    可以使用 Azure DevOps 命令行接口 (CLI) 在 Azure DevOps Services 中管理 PR。 Azure DevOps CLI 在安装 Azure CLI 和 Azure DevOps 扩展时可用。 有关用于管理 PR 的 CLI 命令的列表,请参阅 az repos pr 命令。

    通过拉取请求,指定的审阅者可在将提议的更改应用于存储库的目标分支之前进行检查、讨论和投票。 请记住,如果使用不同分支上的相同文件进行开发,则更改可能发生冲突。 在这种情况下,需要仔细分析和解决这些冲突。 为此,可能需要手动编辑文件,以正确应用来自源分支、目标分支或两个分支的更改。 从源或目标中获取所有更改(只需单击单个按钮即可实现)可能不是最佳选择,并且可能导致丢失一些所需的更改。 这可以使用 ADO 工具来完成,或者使用开发工具(例如 Visual Studio)会更方便。

    若要了解详细信息,请参阅 解决合并冲突

    以下步骤介绍 Azure Repos 中 PR 的审阅者如何浏览 PR 以了解建议的更改:

  • 在 Web 浏览器中,打开 Azure DevOps 组织的团队项目。 依次选择“存储库”>“拉取请求”以列出 PR。 新打开的 PR 默认为“概述”选项卡。

  • PR 的“概述”选项卡显示标题、说明、审阅者、链接的工作项、历史记录、状态和注释。 阅读 PR 说明以查看建议的更改。 查看注释以了解其他审阅者提出的问题。

    预计每个文件都会进行多次修改,其名称旁标有“+”号或“重命名、编辑”标签。 如果某个文件的更改超过 50%,将被视为已重命名。这是无法更改的 Git 存储库的默认阈值。

    对于任何大于 5 MB 的单个文件,差异视图将显示截断的文件内容。 如需完整内容的差异视图,请使用本地差异工具下载并查看此类文件。

    使用左侧文件树查看另一个文件,或者选择文件树的根以查看所有文件更改的摘要视图。

  • 若要查看特定 推送 引入源分支的变更集,请从更改下拉列表中选择一个或多个变更集。 选择一个或多个变更集时,差异视图将更新为仅显示所选变更集的更改。 如果自上次评审以来已将更改推送到 PR,而你只想查看新更改,此功能非常有用。 更改下拉列表使用每个推送操作中最终提交的提交消息来命名每个变更集。

    从更改下拉列表中选择多个变更集时,按住 Shift 键。

  • 选择“更新”选项卡可查看所有推送的变更集,以确保未错过任何源分支更改。 变更集带编号,最新的变更集显示在列表顶部。 每个变更集都会显示在该推送操作中推送的提交。 强制推送的变更集不会覆盖变更集历史记录,并且并且会像其他变更集一样显示在变更集列表中。

  • 选择“提交”选项卡,查看源分支与目标分支分离后的提交历史记录。 如果 PR 作者强制推送不同的提交历史记录,则“提交”选项卡中的提交历史记录将被覆盖,因此“提交”选项卡中显示的提交可能与“更新”选项卡中显示的提交不同。

    为了快速了解 PR 状态,PR“概述”选项卡汇总了用于判断 PR 通过或失败的检查、要求和分支策略。 在某些情况下,摘要会显示状态检查日志中的失败消息片段。 概述仅列出失败的策略,但可以通过选择“查看 <n> 检查”来查看所有通过和失败的策略检查。

    在 PR“概述”选项卡上,可以查看 PR 说明和注释以了解建议的更改,并查看其他审阅者提出的问题。

    选择 PR“文件”选项卡以查看对拉取请求的目标分支旁的源分支所做的实际更改。

    Azure DevOps 拉取请求和 Azure DevOps 分支比较的不同变化是由不同的比较方法造成的。

    git diff 命令有两种比较方式:双点 ( git diff A..B ) 和三点 ( git diff A...B )。 默认情况下,拉取请求显示三点差异,而分支比较显示两点差异。

          C---D---E branch
    A---B---F---G   master
    

    拉取请求:git diff branch...master 将仅生成 F、G 提交。 分支比较:git diff branch..master 将生成 C、D、E、F、G 提交。

    有关更多详细信息,请参阅 three-dot-and-two-dot-git-diff-comparisonsgit diff

    查看单个选定文件的差异时,文件大小限制为 5 MB。 若要查看和比较大于 5 MB 的文件,可以下载文件并使用本地差异工具查看。 查看文件集合的差异时,出于性能原因,每个文件的大小限制为 0.5 MB。

    从“所有更新”下拉列表中查看以前版本的代码。

    对分支的每次更新都会向列表和 PR 的“更新”选项卡上添加一个新版本。 当你选择不同的更新时,差异视图也会更新以显示每个 PR 版本中文件之间的差异。

    离开 PR 后也能通过单步执行自上次评审以来所做的更改来获知 PR 更新。

    在“更新”选项卡上浏览作者的更改列表。

    在“提交”选项卡上查看并选择对分支的提交所做的更改。

    PR 作者和审阅者可以通过添加和响应 PR 注释来相互通信。 评审 PR 时,请使用注释指出对所建议更改的疑问、建议更改以及响应以前的注释。 旨在获得准确且易于理解的建设性反馈。 使用收件人 @username 直接向其寻址。 使用 #workitemID 引用工作项,并使用 !pullrequestID 引用其他 PR。 有时,PR 作者会出于文档目的为自己创建注释。

    在注释中提供反馈

    如果你的反馈适用于文件中的特定行或行范围,请在文件中的该位置添加注释:

  • 在 PR 的“文件”选项卡中,将鼠标悬停在要批注的行上,然后选择注释按钮 以打开内联注释框。 还可以选择多行,然后选择将鼠标悬停在这些行上时显示的注释按钮。

  • 在注释框中输入注释,然后选择“批注”。

  • 若要解决注释而不回复,请选择注释下的“解决”。
  • 若要回复注释,请在“编写答复”字段中键入你的回复,然后选择“回复”。
  • 若要回复并解决注释,请在“编写答复”字段中键入你的回复,然后选择“回复并解决”。
  • 在答复中使用 @username 回复特定审阅者,并使用 #workitemID 引用工作项。 还可以使用 !pullrequestID 引用其他 PR。
  • 新注释最开始为“活动”状态。 选择“解决”或“回复并解决”可将注释状态更新为“已解决”&

    注释解决下拉列表中提供了更多选项:

  • 活动:注释仍在评审中。
  • 挂起:此注释中的问题将得到解决,但尚未修复。
  • 已解决:此注释中提出的问题已解决。
  • 不会修复:注释中的建议已明确,但此 PR 不会解决该问题。
  • 已关闭:有关此注释的讨论已结束。
  • 若要跟踪已审阅的文件,请选择 PR 中某个文件旁边的“更多选项”,然后选择“标记为已审阅”。

    为方便起见,PR 作者可以直接在 Azure Repos 中编辑文件。 例如,你可能接受了审阅者建议的代码更改,并希望在其他位置进行类似的更改。

  • 选择“存储库”>“文件”,选择 PR 源分支,选择一个文件,然后选择“编辑”。

  • 在编辑器中进行更改,然后选择“提交”以打开“提交”对话框。

  • 在“提交”对话框中,根据需要编辑提交消息,然后选择“提交”以提交并将更改推送到 PR。

  • 批准:批准 PR 中建议的更改。 此选项只是一个投票,不代表批准 PR。

  • 批准,同时提出建议:批准 PR 中建议的更改,并提供可选的改进建议。 此选项只是一个投票,不代表批准 PR。

  • 等待作者:要求作者查看审阅者注释。 处理完注释后 PR 作者应告知审阅者,以便审阅者可重新审阅代码。 如果所需的审阅者设置了此投票选项,则投票将阻止 PR 批准。

  • 拒绝:表示不接受更改。 选择此选项时,请添加说明原因的注释。 如果所需的审阅者设置了此投票选项,则投票将阻止 PR 批准。

  • 重置反馈:清除投票。 没有投票并不妨碍 PR 完成

  • 批准:批准 PR 中建议的更改。
  • 批准,同时提出建议:批准 PR,但提供可选的改进建议。
  • 等待作者:不批准更改,并要求作者查看注释。 作者解决完你的问题后应告知你,以便你再次评审代码。
  • 拒绝:不接受更改。 在 PR 中留下注释以解释原因。
  • 重置反馈:删除投票。
  • 若要就是否批准 PR 进行投票,请使用 az repos pr set-vote 命令。

    az repos pr set-vote --id
                         --vote {approve, approve-with-suggestions, reject, reset, wait-for-author}
                         [--detect {false, true}]
                         [--org]
                         [--subscription]
    --vote
    拉取请求的新投票值(接受的值:approveapprove-with-suggestionsrejectresetwait-for-author--detect
    自动检测组织(接受的值:falsetrue--organization
    是,如果未设置默认组织并且 git 配置文件未指定组织
    Azure DevOps 组织 URL,或使用以下命令设置默认组织:az devops configure -d organization=<organization URL>
    --subscription
    Azure 订阅的名称或 ID,或使用以下命令设置默认订阅:az account set -s <name or ID>
    

    以下命令将投票批准 PR #21。 该命令会返回一个表。

    az repos pr set-vote --id 21 --vote approve --output table
    
    Name            Email                ID                                    Vote      Required
    --------------  ------------------- -------------------------------------  --------  ----------
    Jamal Hartnett  jamalh@fabrikam.com  00000000-0000-0000-0000-000000000000  Approved  False
    

    以下命令将删除你的投票。 该命令会返回一个表。

    az repos pr set-vote --id 21 --vote reset --output table
    
    Name            Email                ID                                    Vote      Required
    --------------  ------------------- -------------------------------------  --------  ----------
    Jamal Hartnett  jamalh@fabrikam.com  00000000-0000-0000-0000-000000000000            False
    
  • 完成:如果所有必需的审阅者都已批准 PR,并且满足所有必需的分支策略,将立即完成该 PR。

  • 设置自动完成:当所有必需的审阅者批准 PR 并满足所有必需的分支策略时自动完成 PR。

  • 标记为草稿:将 PR 设置为草稿状态以指示它尚未准备好评审。 对于草稿 PR,可以选择“发布”以删除其草稿状态,并将其标记为可供评审。

  • 放弃:关闭 PR。 对于已放弃的 PR,可以选择“重新激活”将其还原。

    有关完成 PR 的详细信息,请参阅完成拉取请求

    完成拉取请求

  • 拉取请求更新通知
  • 关于拉取请求和权限
  •