repostack doctor
诊断 stack 配置和健康状况。
repostack doctor
执行流程
doctor 是纯诊断命令,不会修改任何文件。它按顺序执行以下检查:
1. repostack.yaml 检查
- 文件是否存在。
- 是否能被成功解析为有效 YAML。
- 如果失败:标记为
error并直接停止后续检查(因为后续都依赖配置)。
2. 用户配置检查
- 若定义了
users:- 检查
.repostackrc是否存在。 - 检查其中指定的用户是否在
users列表中。 - 任一失败标记为
error。
- 检查
- 若未定义
users:- 检查
.repostackrc是否存在。 - 若存在标记为
warning(提示多余的 rc 文件)。
- 检查
3. .gitignore 检查
- 检查
.gitignore是否包含.repostackrc。 - 仅在以下情况执行:
- 配置中定义了
users,或 .repostackrc文件已存在。
- 配置中定义了
- 若
.gitignore缺失或不包含该规则,标记为warning。
4. Repo 状态检查
- 遍历
config.repos中的每个 repo:- 路径是否存在?
- 路径是否为 Git 仓库?
- 任一失败标记为
error。
5. Lock 文件检查
- 检查
repostack.lock.yaml是否存在。 - 缺失时标记为
warning(并提示运行repostack snapshot)。
6. Stack root Git 检查
- 检查当前目录是否为 Git 仓库。
- 不是则标记为
error。
7. Repo 父目录 .gitignore 检查
- 对每个 repo,检查其父目录的
.gitignore是否包含该 repo 的目录名。 - 目的是防止子 repo 被意外提交到 stack root 的 Git 历史中。
- 失败时标记为
warning。
8. 未跟踪 Git 仓库扫描
- 在 stack root 下扫描深度为 2 的目录结构。
- 跳过已注册的 repo 和
.git目录。 - 如果发现独立的 Git 仓库但未在
repostack.yaml中注册,标记为warning。 - 扫描过程中的权限错误会被静默忽略。
输出格式
每条检查结果以图标前缀显示:
✓绿色 — 正常⚠黄色 — 警告(建议修复,但命令仍返回 0)✗红色 — 错误(严重问题)
涉及文件
| 文件 | 操作 |
|---|---|
repostack.yaml | 读取 |
.repostackrc | 读取 |
.gitignore | 读取 |
repostack.lock.yaml | 读取(仅检查存在性) |
| 各 repo 目录及父目录 | 读取 |
副作用
- 无。这是一个只读诊断命令。
错误与边界情况
- 只有
repostack.yaml缺失或解析失败时才会提前终止。 - 其他单项检查失败只会记录问题,不会中断流程。
- 未跟踪仓库扫描深度硬编码为 2,深层嵌套的仓库不会被检测到。
输出示例
✓ repostack.yaml exists
✓ .gitignore contains .repostackrc
✓ Using user: alice
✓ Repo 'foo': OK
✓ Repo 'bar': OK
⚠ Lock file not found. Run: repostack snapshot
✓ Stack root is a git repository
适用场景
- 排查配置问题
- 验证环境设置
- CI/CD 前置检查