repostack init

初始化当前目录为 stack root。

repostack init [options]

选项

选项简写说明
--yes-y如果当前目录不是 Git 仓库,自动初始化

执行流程

检查 repostack.yaml
  • 若已存在:跳过创建,命令对此文件是幂等的。
  • 若不存在:写入初始配置模板(version: 1,空的 reposviews)。

检查当前目录是否为 Git 仓库
  • 通过 git rev-parse --show-toplevel 判断。
  • 如果已经是 Git 仓库:不做任何操作。
  • 如果不是 Git 仓库:
    • 传入 --yes 时,自动执行 git init
    • 未传 --yes 时,静默跳过(不会交互式询问)。

更新 .gitignore(仅当 .repostackrc 已存在时)
  • 若当前目录下存在 .repostackrc 文件:
    • 读取 .gitignore(如果不存在则创建)。
    • 若已包含 .repostackrc,不做修改。
    • 否则在末尾追加一行 .repostackrc
  • .repostackrc 不存在,则跳过此步骤。

涉及文件

文件操作条件
repostack.yaml读取(检查存在性)始终
repostack.yaml写入初始模板仅当缺失时
.gitignore读取 / 追加 / 创建仅当 .repostackrc 存在时

Git 操作

  • git rev-parse --show-toplevel(只读检测)
  • git init(仅在 --yes 且当前目录非 Git 仓库时执行)

错误与边界情况

  • repostack.yaml 的写入错误会向上抛出,导致命令失败。
  • .gitignore 的读写错误会被静默吞掉(返回 false,不中断命令)。
  • 如果目录已经初始化过,多次运行 repostack init 是安全的(幂等的),仅当 .repostackrc 存在时才会再次确认 .gitignore

示例

# 全自动初始化(推荐用于新仓库)
repostack init --yes

# 只创建配置,手动控制 Git
repostack init
git init  # 自己初始化 Git