概览

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.yamlsnapshot
  • 多用户配置支持,团队协作更灵活(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"

推荐阅读顺序

先看 快速开始 - 5 分钟上手

再看 配置说明 - 了解 repostack.yaml 完整格式

了解 Lock 文件 - 版本锁定的核心机制

如果要理解快照语义,再看 Snapshot 与 Sync

重要:理解 Stack Root 作为 Git 仓库 - 时间旅行的基础

需要查命令时,去看 CLI 总览命令参考