概览
repostack 是一个面向多仓开发目录的视图编排工具。
它不把多个独立仓库合并成真正的 monorepo,而是在保留 multirepo 发布边界的前提下,为日常开发提供更接近 monorepo 的工作体验。
它解决什么问题
当一个开发目录里并排放着多个 Git 仓库时,常见痛点包括:
- 不知道当前 stack 里到底纳入了哪些 repo
- 缺失 repo 需要手动 clone
- 相同命令需要反复进入不同目录执行
- 很难记录"这一组 repo 当前分别停在哪个 revision"
repostack 的第一版就是为这些问题服务的。
核心概念
Stack
一个受 repostack 管理的开发目录。包含:
repostack.yaml- 声明文件(哪些 repo、如何分组)repostack.lock.yaml- 锁定文件(精确的 Git 状态)- 一组并排放置的 Git 仓库
Repo Entry
纳入 stack 的每个仓库,在配置中称为一个 entry:
- 有名称、本地路径、远程地址
- 可以有多个标签(tags)
- 可以被多个视图(views)引用
Views & Tags
Tags - 给 repo 打分类标签:
repos:
- name: foo
tags: [runtime, core]
Views - 预定义的选择规则:
views:
runtime:
tags: [runtime] # 选择所有 runtime 标签的 repo
区别:
- Tags = "这是什么类型的 repo"(分类)
- Views = "这次要操作哪些 repo"(快捷选择)
当前版本可以做什么
- 声明一个 stack 中包含哪些 repo(
use/remove) - 下载和同步缺失 repo(
pull/sync) - 列出各 repo 当前的 branch、revision 和 dirty 状态(
list) - 在多个 repo 中批量执行 shell 命令(
run) - 将当前 stack 的 Git 状态写入
repostack.lock.yaml(snapshot) - 多用户配置支持,团队协作更灵活(
users/whoami) - 诊断 stack 健康状况(
doctor)
快速示例
# 初始化 stack
repostack init
# 添加 repo(会自动 snapshot)
repostack use foo --yes
repostack use bar --yes
# 批量执行命令
repostack run --view runtime -- pnpm test
# 查看状态
repostack list
# 记录当前状态到 lock 文件
repostack snapshot
# 提交 stack 配置到版本控制
git add repostack.yaml repostack.lock.yaml
git commit -m "update stack"