终端多仓库监控面板:我的开源 CLI 工具 peekgit

0 阅读4分钟

在日常开发中,你是否也厌倦了频繁切换目录、手动 git status 检查各个仓库的同步状态?写了一个终端内的多仓库监控工具 peekgit,用 Go + Bubble Tea 开发,支持一键查看 workspace 下所有 Git 仓库状态、GitHub PR / Issues,以及分栏 Diff 查看器。


写在前面

作为同时维护着多个项目的开发者,我面临一个低效且重复的工作流:

  1. 每天打开终端,要 cd 到各个项目目录下执行 git statusgit fetch
  2. 想看看有哪些 PR 需要 review,得打开浏览器翻 GitHub
  3. 想知道有哪些 Issues 需要处理
  4. 不同仓库的依赖版本、分支状态全凭记忆
  5. 最重要的一点,因为我一个项目分模块开发,会有多个仓库,市面上的工具没有办法满足我监控全局的需求,所以决定自己 (让ai) 做一个

为了把这套繁琐的”人肉监控“自动化,我使用 Go 语言开发了 peekgit —— 一个完全运行在终端内的多仓库监控面板。

项目地址: github.com/Fairfarren/…


peekgit 能做什么

1. 一站式 Workspace 监控

启动后,第一个标签页展示你配置的所有 Workspace 卡片。每个 Workspace 对应一组 Git 仓库:

CleanShot 2026-04-26 at 13.34.52@2x.png

选中 Workspace 按回车,立即进入该 workspace 下所有仓库的监控面板:

  • 每个仓库一行,展示分支名、与远端同步状态、是否有未提交修改
  • 支持 / 过滤仓库名,按 f 单仓 pull,按 F 全量 pull
  • g 直接唤起 lazygit 进入当前仓库

2. GitHub PR / Issues 集成

通过 GitHub CLI 自动获取认证(gh auth token),无需手动配置 Token:

  • PR 列表:展示当前账号参与的所有 PR,支持按 o 在浏览器中打开
  • Issues:展示当前账号创建或被 assignee 的 Issues
  • Diff 查看器:选中 PR 按 d 进入分栏 Diff 视图(左侧文件树 : 右侧 diff 内容 = 3:7 比例)

CleanShot 2026-04-26 at 13.39.27@2x.png

CleanShot 2026-04-26 at 13.41.06@2x.png

3. 配置文件热加载

配置文件 ~/.config/peekgit/config.json 支持热加载,修改配置后约 2 秒自动刷新,无需重启程序:

{
  "workspaces": {
    "All Projects": [
      "~/projects/*"
    ]
  }
}

通过 /* 通配符路径,程序会自动扫描目录下的所有 Git 仓库——再也不用一个个添加路径了。

4. 类似 Vim 的快捷键体系

如果你是 Vim 用户,可以无缝上手:

  • h/j/k/l 或方向键导航
  • Tab/←→ 切换标签页
  • 1/2/3 快速切换到 workspace / PR / Issues
  • q 返回或退出

技术选型与架构

为什么用 Go + Bubble Tea?

当时正在学习 Go 语言,想找一个实战项目来巩固所学,于是决定用 Go 来开发。在调研 TUI 框架时发现了 Bubble Tea,它的 Elm 架构和 Go 的并发特性与这个工具的需求非常契合:

  1. Bubble Tea 的 Elm 架构:基于 Model-Update-View 的模式天生适合构建交互式 TUI,状态管理和消息路由非常清晰
  2. Go 的并发能力:监控多个仓库的 fetch 和状态检查天然适合 goroutine,channel 做并发控制优雅且高效
  3. 单二进制分发:Go 编译出的单文件二进制,配合 GoReleaser 可以非常顺畅地发布到多平台

核心架构设计

项目采用分层架构,职责清晰:

cmd/peekgit/           CLI 入口,负责 flag 解析和启动
internal/
  config/              命令行参数 + config.json 解析
  workspace/           仓库路径扫描、有效性校验、绝对路径处理
  gitcli/              本地 Git 命令封装(status, fetch, branch, log)
  provider/github/     GitHub API 封装 + TTL 缓存
  model/               共享数据模型(Repo, PR, Issue, Workspace)
  tui/                 Bubble Tea 的 Model/Update/View 实现
  cache/               TTL 缓存(GitHub 请求结果)

内部实现上,仓库状态的批量检查是通过可控并发扫描完成的:设定一个并发上限(默认 3),用 goroutine 池去并行 fetch 各仓库的远端状态,这样既不会一次性发起太多请求导致网络拥堵,也能比串行检查快很多倍。

配置文件的热加载也是一个小亮点:后台每 2 秒检查一次 ~/.config/peekgit/config.json 的改动,变更后自动刷新工作区和仓库列表,无需重启程序就能生效。


安装与快速上手

安装方式

macOS / Linux (Homebrew)

brew tap Fairfarren/peekgit https://github.com/Fairfarren/peekgit
brew install Fairfarren/peekgit/peekgit

Windows (Scoop)

scoop install https://raw.githubusercontent.com/Fairfarren/peekgit/master/scoop/peekgit.json

Go install

go install github.com/Fairfarren/peekgit/cmd/peekgit@latest

使用配置

创建 ~/.config/peekgit/config.json

{
  "workspaces": {
    "My Projects": [
      "~/work/*",
      "~/open-source/my-tool"
    ]
  }
}

然后直接运行 peekgit。如果需要临时扫描当前目录,使用:

peekgit --workspaces      # 当前目录下 1 层子目录
peekgit --workspaces=2    # 递归 2 层

总结

如果你也管理着多个 Git 仓库,或者对 TUI 开发感兴趣,欢迎试用:

go install github.com/Fairfarren/peekgit/cmd/peekgit@latest

有任何建议或 Bug,欢迎在 GitHub Issues 反馈。


项目地址: github.com/Fairfarren/…


ps:如果大家想要交流ai开发也可以讨论下