`quicommit ginit`(别名 `gi`)离线完成仓库起步:用 git2 建库并确立初始分支、 写最简 README.md、按根目录标志文件装配 .gitignore、按 --add 添加远程, `--profile` 可选套用已有 Git 配置。在已有仓库上重复执行只补齐缺失项:绝不覆盖 既有的 README.md/.gitignore、绝不改动已有 remote 的地址、不提供 --force、 不创建首个提交。边界取舍见 ADR 0006,命令命名见 ADR 0005。 实现落在新的 src/git/init.rs(9 个 git 层函数)与 src/commands/ginit.rs, 命令层不直接引用 git2,GitRepo 公开接口未改动,其余命令行为不变。 测试:src/git/init.rs 11 条单元测试、tests/ginit_tests.rs 18 条集成测试; 新增 35 个 ginit_* 消息覆盖 7 种语言。 另将 CONTEXT.md 与 docs/adr/ 纳入版本跟踪(.gitignore 放开 adr/ 与 CONTEXT.md 两条忽略规则);RAODMAP.md 除 ginit 条目外还包含此前未提交的 规划条目更新。
1.5 KiB
init and ginit stay two commands, one letter apart
QuiCommit's existing init bootstraps QuiCommit's own configuration (config.toml: LLM provider plus a first Git Profile), while the new ginit bootstraps a local Git repository in the current directory. The two names differ by a single character and appear next to each other in quicommit --help. We kept both rather than unifying them, because the CLI surface is public API: renaming init or folding repo creation into it would break existing users, existing alias tests, and ADR 0004's promise that --yes behaves identically per command. Disambiguation is carried by help text only — "Initialize quicommit configuration" versus "Initialize a local Git repository" — and by the CONTEXT.md pair Config init / Repo init.
Considered Options: rename the config flow to config init and hand init to repo creation (rejected — breaks existing users and their scripts, which is exactly the blast radius this release was scoped to avoid); nest it as quicommit repo init (rejected — would introduce a new top-level command group for a single command); pick a longer name like gitinit or git-init (rejected — no clearer than ginit, and less consistent with the existing terse alias set i/c/t/cl/p/cfg).
Consequences: gi is added as an alias, and every doc that lists commands must show the two help strings adjacent so the contrast is visible. Anyone later tempted to "clean up" this near-collision should read this ADR first: it is deliberate.