repostack use <path>

将本地 repo 纳入当前 stack 管理。

repostack use <path> [options]

参数

参数说明
pathRepo 的本地路径(相对或绝对,相对于 stack root)

选项

选项简写说明
--yes-y跳过所有确认提示,自动创建目录和初始化 git

执行流程

用户校验
  • 如果 repostack.yaml 中定义了 users,会强制要求 .repostackrc 存在且指向有效用户,否则抛出错误。

读取基础配置
  • 加载 repostack.yaml(不合并用户覆盖配置,因为接下来要修改并写回)。

路径解析与检查
  • path 解析为相对于 stack root 的完整路径。
  • 如果路径不存在
    • --yes 模式:静默创建目录。
    • --yes 模式:弹出 confirm 提示 Path "..." does not exist. Create it?,默认 ;拒绝则中断命令。

Git 仓库检查
  • 如果目标路径不是 Git 仓库:
    • --yes 模式:自动执行 git init
    • --yes 模式:弹出 confirm 提示 "..." is not a git repository. Initialize it?,默认 ;拒绝则中断命令。

确认添加到 stack
  • --yes 模式:弹出 confirm 提示 Add "..." to repostack?,默认 ;拒绝则中断命令。

更新配置
  • 生成新配置:
    • name 取自路径的最后一级目录名。
    • source 默认为该路径本身。
    • branch 默认为 "main"
    • namepath 已存在于 repostack.yaml 中,抛出 Repo already registered: ...
  • 将新配置写回 repostack.yaml

自动生成 lock 文件
  • 读取各 repo 当前 Git 状态并覆盖写入 repostack.lock.yaml

更新 .gitignore
  • 确保 .gitignore 包含 .repostackrc

涉及文件

文件操作
repostack.yaml读取 / 写入
.repostackrc读取(用户校验)
repostack.lock.yaml写入(覆盖)
.gitignore读取 / 追加 / 创建

Git 操作

  • git rev-parse --show-toplevel(检测是否为仓库)
  • git init(如路径不是仓库且用户同意 / --yes
  • git rev-parse --abbrev-ref HEADgit rev-parse HEAD(生成 snapshot)

错误信息

场景错误信息
未提供 pathMissing repo path for \repostack use`.`
用户未配置(且配置了 users)This stack requires a user configuration...
用户拒绝创建目录Aborted: user declined to create directory
用户拒绝初始化 gitAborted: user declined to initialize git repository
用户拒绝添加Aborted: user declined to add repo
重复注册Repo already registered: ${repoPath}

副作用

  • 可能创建新的本地目录。
  • 可能初始化新的 Git 仓库。
  • repostack.yaml 中追加一条 repo 记录。
  • 覆盖生成 repostack.lock.yaml
  • 修改或创建 .gitignore

示例

# 交互模式
repostack use my-repo

# 自动模式(适合脚本)
repostack use my-repo --yes