# repostack init

> 

初始化当前目录为 stack root。

```bash
repostack init [options]
```

## 选项

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

## 执行流程

<steps level="4">

#### **检查 `repostack.yaml`**- 若已存在：跳过创建，命令对此文件是幂等的。
- 若不存在：写入初始配置模板（`version: 1`，空的 `repos` 和 `views`）。





#### **检查当前目录是否为 Git 仓库**- 通过 `git rev-parse --show-toplevel` 判断。
- 如果已经是 Git 仓库：不做任何操作。
- 如果不是 Git 仓库：

  - 传入 `--yes` 时，自动执行 `git init`。
  - 未传 `--yes` 时，**静默跳过**（不会交互式询问）。





#### **更新 `.gitignore`（仅当 `.repostackrc` 已存在时）**- 若当前目录下存在 `.repostackrc` 文件：

  - 读取 `.gitignore`（如果不存在则创建）。
  - 若已包含 `.repostackrc`，不做修改。
  - 否则在末尾追加一行 `.repostackrc`。
- 若 `.repostackrc` 不存在，则跳过此步骤。





</steps>

## 涉及文件

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

## Git 操作

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

## 错误与边界情况

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

## 示例

```bash
# 全自动初始化（推荐用于新仓库）
repostack init --yes

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