sow repo
sow repo 用于创建、列出、查看、升级和删除仓库。每个仓库在 pool/ 中保存包文件,在 dists/ 中保存索引。同一仓库的 Dist 共用包文件。
语法
命名
仓库名必须匹配 [a-z0-9][a-z0-9._-]*,且不能是 .、..、.sow、pool、dists,也不能与工作区
保留文件冲突。
SOW 在 <workspace>/<NAME>/ 创建仓库。
sow repo ls
只读列出工作区里的全部仓库。
| 参数 | 说明 | 默认 |
|---|---|---|
-C, --workdir DIR |
工作区发现的起始目录 | 当前目录 |
--json |
输出 JSON | false |
STATUS 取值为 clean、dirty、recovering 或 error。各状态对客户端意味着什么,见
事务与恢复。
sow repo new
更新 sow.yml,然后创建 <workspace>/<NAME>/{pool,dists}、SQLite 数据库与私有状态目录。新仓库
尚未构建,构建快照编号为 0,状态为 clean。
| 参数 | 说明 | 默认 |
|---|---|---|
-C, --workdir DIR |
工作区发现的起始目录 | 当前目录 |
-T, --timeout DUR |
等待锁的最长时间;0 无限等待 |
0 |
-N, --no-wait |
锁被占用时立即失败 | false |
--json |
输出 JSON | false |
用 NAME 指定新仓库的名称。
对已存在的仓库再次运行时,命令报告当前状态,不会创建第二个仓库。
sow repo show
只读显示一个仓库的细节。省略 NAME 时按 CLI 全局约定 中的仓库选择规则
解析。
| 参数 | 说明 | 默认 |
|---|---|---|
-C, --workdir DIR |
工作区发现的起始目录 | 当前目录 |
-r, --repo NAME |
省略 NAME 时用它选择仓库 |
按选择规则 |
--json |
输出 JSON | false |
同时给出 NAME 与 -r 时,使用相同名称:
sow repo migrate
将既有 v0.3 或 v0.4 工作区升级到 SOW 0.5 时,使用 repo migrate。新建的 0.5 仓库已使用 schema v13,无需迁移。
- 停止工作区写操作。
- 备份整个工作区,并保留硬链接。
- 逐个迁移已配置的仓库。
- 对每个仓库运行
build与check。
对其他仓库重复后三条命令。迁移结果包含 schema_from 与 schema_to;重复迁移报告 13 -> 13。Schema v13 增加包池路径查询索引。从 v0.3 迁移时,还会应用中间版本的状态与发布记录修复。
写操作要求当前 schema。兼容的只读命令可以查看旧状态,但不会升级数据库。迁移后使用 SOW 0.5 或更新版本;需要返回旧 schema 时,恢复备份。
--abort 只能在提交决策前放弃未完成的布局迁移,不能撤销已完成的 schema 升级。开发期 C2 布局需要从原始软件包重新建仓。
| 参数 | 含义 | 默认值 |
|---|---|---|
-j, --jobs N |
并行校验/渲染工作线程 | 逻辑 CPU 数 |
--abort |
在提交决策前放弃维护尝试 | false |
-C, --workdir DIR |
工作区发现起点 | 当前目录 |
-r, --repo NAME |
省略 NAME 时选择仓库 |
选择规则 |
-T, --timeout DUR |
最长锁等待;0 无限等待 |
0 |
-N, --no-wait |
锁被占用时立即失败 | false |
--json |
输出 JSON | false |
sow repo rm
删除整个仓库,包括 sow.yml 条目、数据库、pool/ 中的包文件、dists/ 中的索引与私有状态。
不加 -f 时,只能删除空仓库——没有 Dist、没有成员关系、没有软件包对象:
| 参数 | 说明 | 默认 |
|---|---|---|
-f, --force |
删除非空的、未受保护的仓库 | false |
-C, --workdir DIR |
工作区发现的起始目录 | 当前目录 |
-T, --timeout DUR |
等待锁的最长时间;0 无限等待 |
0 |
-N, --no-wait |
锁被占用时立即失败 | false |
--json |
输出 JSON | false |
强制删除
使用 -f 删除非空仓库。设置了 protected: true 的仓库仍然受到保护。
protected
sow.yml 中的 protected: true 阻止删除仓库,包括使用 -f 的情况:
需要删除受保护仓库时,在 sow.yml 中将它的 protected 设为 false。运行 sow config check,再重试删除。
protected 只作用于仓库删除。add、rm、build 与 dist rm 照常工作:
示例
为两层结构创建仓库:
创建仓库时不等待已被占用的锁:
逐行显示仓库名称、状态与构建快照编号:
退出码
| 码 | 触发条件 |
|---|---|
0 |
列出、创建、显示、迁移、放弃提交前的布局转换或删除成功;或 repo new 报告已存在的仓库 |
1 |
创建或删除目录树时的运行时 I/O 错误 |
2 |
用法错误、工作区未找到,或仓库选择有歧义 |
4 |
工作区锁被占用,且给了 --no-wait 或 --timeout 到期 |
5 |
工作区日志的完整性或恢复错误 |
6 |
名称非法、仓库不存在、非空但未给 -f、protected,或 NAME 与 -r 冲突 |
参见
- sow dist —— 下一层
- Managed 工作区 —— 三层模型与发现规则
- 事务与恢复 —— 锁作用域与
recovering状态 - sow.yml 配置参考 ——
protected与仓库级签名配置 - 仓库布局 —— 固定目录结构