Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>ReviewStream/评审直达New to Visual Studio Code? Get it now.
ReviewStream/评审直达

ReviewStream/评审直达

XieSi

|
21 installs
| (0) | Free
在 VS Code 的源代码管理(SCM)界面为每个 Git 仓库添加一个 “Push for Review” 按钮,点击后自动 push 当前分支到远端 refs/for/分支名,适用于 Gerrit 代码评审场景,支持自动识别评审 URL、弹窗与 macOS 系统通知提示。
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

评审直达

评审直达 是一个 Visual Studio Code 扩展,用于在 VS Code 的源代码管理(SCM)界面为每个 Git 仓库添加一个 “Push for Review” 按钮,便于将当前分支推送到 Gerrit 风格的评审分支(refs/for/<branch>)。

主要功能(面向用户)

  • 在每个 Git 仓库的 SCM 页面添加“Push for Review”按钮。
  • 在每个 Git 仓库的 SCM 页面添加“Clear”按钮,用于回收 Git 空间并清理工作区。
  • 自动检测当前分支并将其推送到 refs/for/<branch>。
  • 推送远端策略:仅有一个远端时自动推送;存在多个远端时弹出列表供用户选择后再推送。
  • 推送前会做一次预检:当本次推送注定不会产生新的评审内容(提交已合入目标分支、HEAD 与上次推送过的提交相同,或该提交已经作为 Gerrit 评审的 patchset 上传过——例如在命令行推过、换了工作区后没有本地记录)时,先弹窗说明原因并给出建议命令,避免 Gerrit 返回 no new changes;弹窗中可点「仍然推送」忽略预检继续推送,也可通过 reviewStream.precheckBeforePush 关闭预检。
  • 捕获远端返回信息并尝试识别评审链接;可配置是否在推送后自动打开链接。
  • 执行 git 命令时优先使用 VS Code 设置中的 git.path(与内置 Git 扩展保持一致);若 git 不可用,会直接展示 git 的真实报错与当前使用的 git 路径,而不是笼统地提示“未选择远端”。
  • 在 macOS 上支持系统通知(需要允许 VS Code 的通知权限)。

快速使用

  1. 打开需要操作的仓库并切换到源代码管理(SCM)视图。
  2. 在对应仓库的标题栏点击“Push for Review”按钮。
  3. 推送完成后会弹出结果对话框(成功 / 失败),如果检测到评审链接并且在设置中启用了自动跳转,则会在默认浏览器中打开链接。

如需执行仓库清理:

  1. 在 SCM 中选择目标仓库(支持多仓库场景,也支持子模块仓库)。
  2. 点击“Clear”按钮并在确认弹窗中选择“继续清理”。
  3. 清理过程会显示进度条(fetch/reset/clean/gc)。
  4. 完成后弹窗会展示清理前后体积对比(git 目录、objects 目录、工作区)。

安全提示:Clear 会执行 git reset --hard 和 git clean -fdx,会删除未提交改动和未追踪文件,请先确认重要内容已提交或备份。

Clear 清理流程

Clear 按钮主要参考 CompactWebGLHistory.py --clear 的清理思路,并做了 VS Code 交互增强。

  • 记录清理前仓库体积(git 目录、objects 目录、工作区)。
  • 识别当前仓库上游分支,优先执行 git fetch <remote> <branch>。
  • 执行 git reset --hard(有上游时重置到远端分支,无上游时重置到本地 HEAD)。
  • 执行 git clean -fdx 清除未追踪文件。
  • 在 git clean -fdx 删除失败时,扩展会根据 reviewStream.clearFallbackRoots 对“可再生目录”执行文件系统兜底删除并重试(默认覆盖多技术栈常见目录,如 node_modules、dist、target、Library、Temp 等)。
  • 在 Windows 出现长路径删除失败时,会自动尝试 git config core.longpaths true 后重试。
  • 若最终仅剩配置的可再生目录中的缓存/锁文件因系统占用无法删除,扩展会记录警告并继续后续 Git 对象回收;详细残留路径可在输出面板查看。
  • 执行本地对象回收:reflog expire、repack -Ad、prune --expire=now、gc --prune=now。
  • 记录清理后仓库体积并弹窗展示体积变化。

清理的详细命令输出会写入 VS Code 输出面板 ReviewStream,用于排查问题。

设置示例(用户可在 VS Code 的设置中修改)

在 settings.json 中的示例:

"reviewStream.autoOpenLink": true,
"reviewStream.urlMappings": [
	{
		"pattern": "gerrit3\\.alibaba-inc\\.com",
		"url": "https://banma-scm.yunos-inc.com/buildCenter/task/prebuild/add"
	}
],
"reviewStream.precheckBeforePush": true,
"reviewStream.clearFallbackRoots": [
	"node_modules",
	"dist",
	"target",
	"Library",
	"Temp"
]
  • reviewStream.autoOpenLink(布尔,默认 true):是否在推送后自动打开识别到的评审链接。
  • reviewStream.urlMappings(对象数组):可配置的正则->URL 映射列表;当返回文本或消息匹配 pattern 时,将自动打开对应的 url(若 autoOpenLink 为 true)。
  • reviewStream.precheckBeforePush(布尔,默认 true):是否在推送前做预检。开启时,若扩展判断本次推送会被 Gerrit 以 no new changes 拒收(提交已在目标分支上、HEAD 与上次推送过的提交相同,或该提交已作为远端评审的 patchset 存在),会先弹窗说明并给出建议命令;关闭后每次点击都直接推送。预检在需要判断“该提交是否已上传过评审”时会额外执行一次 git ls-remote <remote> "refs/changes/*"(通常 1~3 秒),查询失败一律放行。
  • reviewStream.clearFallbackRoots(字符串数组):Clear 在 git clean 删除失败时允许兜底删除的目录根。建议只保留可再生目录(缓存、构建产物、依赖目录),避免误删业务源码。

使用演示与截图

  • alt text
  • SCM 中显示“Push for Review”按钮的示意图

常见用户级问题

  • 我不想自动打开链接怎么办?

    • 请在设置中将 reviewStream.autoOpenLink 设为 false。
  • 如何添加自定义的正则->URL 映射?

    • 在 reviewStream.urlMappings 中添加对象形如 { "pattern": "your-regex", "url": "https://example.com/path" }。
  • 点击推送后提示“无法读取 Git 远端:git 命令执行失败”,应当如何处理?

    • 说明扩展调用的 git 无法执行,弹窗中会附上 git 的真实报错与当前使用的 git 路径,常见原因:
      • macOS 上未接受 Xcode 许可证(报错为 You have not agreed to the Xcode license agreements...),可在终端执行 sudo xcodebuild -license accept 后重试;
      • 扩展会优先使用 VS Code 设置中的 git.path,若该路径不可用请改为可用的 git,例如:
"git.path": "/Library/Developer/CommandLineTools/usr/bin/git"
- 排查时可在 VS Code 输出面板 / 帮助 -> 切换开发人员工具 的控制台中查看 `[git ...]` 日志。
  • 提示“未找到 Git 远端,请先配置远端后再推送。”怎么办?

    • 说明该仓库确实没有配置任何远端,先执行 git remote add <name> <url> 添加远端后重试。
  • 点击推送被拦下,提示“本次推送不会产生新的评审内容”,怎么办?

    • 说明 Gerrit 会以 no new changes 拒收这次推送,通常是三种原因:
      • 代码改了但没有提交(push 只上传已提交的 commit):先执行 git commit --amend --no-edit 把改动并入上一次提交,或新建一次提交,再点推送;
      • 该提交之前已经推送过、或已经合入目标分支:先执行 git fetch <remote> <branch>,再基于最新提交创建新提交后重试;
      • 该提交已经作为某个评审的 patchset 存在于远端(弹窗会指出 change <编号> 的 patchset <序号>,例如在命令行推过):Gerrit 不会为同一个提交重复创建评审,需要先产生新的提交对象,例如执行 git commit --amend --no-edit(改动不变,用于重新触发门禁 / CT 验证)后再推送。
    • 如果确认要忽略预检直接推送,在弹窗中点「仍然推送」;如果不想再看到预检,把 reviewStream.precheckBeforePush 设为 false。
  • 推送结果提示“推送被 Gerrit 拒收:没有新的评审内容(no new changes)”,怎么办?

    • 这是 Gerrit 的原始回复:本次推送的提交与 Gerrit 上已有的 patchset 完全相同,或该提交已经合入目标分支。扩展会同时把该提交记为“已推送”,下次点击会被预检直接拦住,不必再等一次完整推送。
    • 处理方式同上:先产生新的提交(或 git commit --amend --no-edit)再推送。

想了解如何开发或构建此扩展?

开发者相关的安装、编译、打包与测试说明已移入开发者文档: DEVELOPMENT.md

参考

更多实现细节请查看源代码: src/extension.ts 更多模块化实现可查看: src/pushForReview.ts、src/gitClear.ts

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft