在日常开发中,你是否也厌倦了频繁切换目录、手动
git status检查各个仓库的同步状态?写了一个终端内的多仓库监控工具 peekgit,用 Go + Bubble Tea 开发,支持一键查看 workspace 下所有 Git 仓库状态、GitHub PR / Issues,以及分栏 Diff 查看器。
写在前面
作为同时维护着多个项目的开发者,我面临一个低效且重复的工作流:
- 每天打开终端,要
cd到各个项目目录下执行git status和git fetch - 想看看有哪些 PR 需要 review,得打开浏览器翻 GitHub
- 想知道有哪些 Issues 需要处理
- 不同仓库的依赖版本、分支状态全凭记忆
- 最重要的一点,因为我一个项目分模块开发,会有多个仓库,市面上的工具没有办法满足我监控全局的需求,所以决定自己
(让ai)做一个
为了把这套繁琐的”人肉监控“自动化,我使用 Go 语言开发了 peekgit —— 一个完全运行在终端内的多仓库监控面板。
项目地址: github.com/Fairfarren/…
peekgit 能做什么
1. 一站式 Workspace 监控
启动后,第一个标签页展示你配置的所有 Workspace 卡片。每个 Workspace 对应一组 Git 仓库:
选中 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 比例)
3. 配置文件热加载
配置文件 ~/.config/peekgit/config.json 支持热加载,修改配置后约 2 秒自动刷新,无需重启程序:
{
"workspaces": {
"All Projects": [
"~/projects/*"
]
}
}
通过 /* 通配符路径,程序会自动扫描目录下的所有 Git 仓库——再也不用一个个添加路径了。
4. 类似 Vim 的快捷键体系
如果你是 Vim 用户,可以无缝上手:
h/j/k/l或方向键导航Tab/←→切换标签页1/2/3快速切换到 workspace / PR / Issuesq返回或退出
技术选型与架构
为什么用 Go + Bubble Tea?
当时正在学习 Go 语言,想找一个实战项目来巩固所学,于是决定用 Go 来开发。在调研 TUI 框架时发现了 Bubble Tea,它的 Elm 架构和 Go 的并发特性与这个工具的需求非常契合:
- Bubble Tea 的 Elm 架构:基于 Model-Update-View 的模式天生适合构建交互式 TUI,状态管理和消息路由非常清晰
- Go 的并发能力:监控多个仓库的 fetch 和状态检查天然适合 goroutine,
channel做并发控制优雅且高效 - 单二进制分发: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开发也可以讨论下