gvt repo — 多仓库同步推送
从 .gvt/repo/ 读取主/副仓库配置并执行同步推送。支持设置一个主仓库和多个副仓库;推送或打 tag 推送时,先完成所有副仓库的推送,最后再推主仓库。副仓库推送失败默认不阻塞主流程,可在配置中设 block = true 使其阻塞。
用法
bash
gvt repo # 查看当前仓库配置概览
gvt repo ls # 列出所有已配置仓库
gvt repo add <name> -u <url> # 添加副仓库(默认)
gvt repo add <name> -u <url> --main # 添加并设为主仓库(唯一)
gvt repo add <name> -u <url> --block # 添加副仓库并设为阻塞
gvt repo remove <name> # 移除仓库
gvt repo enable/disable <name> # 启用/禁用指定仓库
gvt repo enable/disable --all # 切换全局总开关
gvt repo push # 推送当前分支(先副后主)
gvt repo push -b main # 推送 main 分支
gvt repo tag v1.0.0 # 推送标签(先副后主)子命令与参数
| 子命令 | 说明 |
|---|---|
add | 添加仓库(默认副仓库)。-u/--url 必填;--main 设为主仓库(唯一,已有 main 自动降级);--block 副仓库推送失败阻塞主流程;--disabled 添加后默认禁用 |
remove | 移除指定仓库 |
enable / disable | 启用/禁用指定仓库(可多个),或 --all 切换全局总开关 |
push | 同步推送分支(默认当前分支)。-b/--branch 指定分支;--no-hook 跳过推送前钩子检查;--dry-run 演练 |
tag | 同步推送标签(位置参数)。支持 --no-hook、--dry-run |
ls | 列出所有已配置仓库 |
推送顺序与阻塞
- 推送前默认运行一次项目完整钩子检查(仅当项目存在
.gvt/hook/时触发,--no-hook关闭)。 - 先按配置顺序推送所有副仓库(mirror):
block = false(默认):该副仓库推送失败仅记录并继续;block = true:该副仓库推送失败即中止,不再推主仓库。
- 最后推送主仓库(main)。
配置结构
配置存于 .gvt/repo/config.toml([repo] enabled 总开关)与 .gvt/repo/remotes/<name>.toml(每个仓库一个),由 gvt repo add 自动维护,也可手动编辑。
示例 remotes/github.toml:
toml
[remote]
name = "github"
url = "git@github.com:user/project.git"
enabled = true
role = "main" # main=主仓库 / mirror=副仓库(缺省 mirror)
block = false # 副仓库推送失败是否阻塞主流程(缺省 false)