# 初始化

发现软件包、创建 Semifold 配置，并按需生成受支持的 GitHub Actions 工作流。

Source: https://semifold.noctisynth.org/zh/docs/commands/init/
Language: zh



`smif init` 用来让一座仓库开始使用 Semifold。它通常只在仓库根目录执行一次；以后增加、删除或移动软件包时，使用 [`smif config sync`](https://semifold.noctisynth.org/zh/docs/commands/config/)。

```bash
smif init
```

## 默认交互流程 [#默认交互流程]

在终端中，Semifold 会询问要扫描的内置软件生态、基础与发布分支名称、默认变更日志分类，以及是否生成 GitHub Actions。完成软件包发现后，它会规划并写入：

* `.changes/config.toml`：分支、标签、变更日志模板、发现的软件包和解析器默认配置；
* `.github/workflows/semifold-ci.yaml`：选择 GitHub Actions 时生成；
* `.github/workflows/semifold-status.yaml`：选择 GitHub Actions 时生成，用于拉取请求状态评论。

初始化后应立即检查 `[packages]` 下稳定的软件包 ID（`PackageId`）和路径。

## 自动化调用 [#自动化调用]

不能交互的调用者必须明确回答每一项选择：

```bash
smif init --resolvers rust --resolvers nodejs \
  --base-branch main \
  --release-branch release \
  --default-tags \
  --github-actions
```

需要明确选择空结果时，使用对应的 `--no-resolvers`、`--no-default-tags` 或 `--no-github-actions`。这种形式用于自动化，不是本地使用的前置知识。

## 重要选项 [#重要选项]

| 选项                         | 行为                              |
| -------------------------- | ------------------------------- |
| `--target <路径>`            | 把变更集目录从默认 `.changes` 改为其他位置。    |
| `--resolvers <ID>`         | 扫描一种内置软件生态；可以重复指定。              |
| `--base-branch <名称>`       | 选择接收自动生成的发布 Pull Request 的基础分支。 |
| `--release-branch <名称或模板>` | 选择由自动化维护的发布分支；模板渲染后也不能与基础分支相同。  |
| `--force`                  | 明确重新初始化已有配置，不用于日常同步软件包。         |
| `--allow-non-root`         | 允许从子目录调用，同时使用自动发现的仓库根目录。        |
| `--dry-run`                | 只规划和报告初始化结果，不写文件。               |

发现失败或必要选择无效时，初始化会在写入前停止。尤其不要把 `--release-branch` 当成当前基础分支的另一个名称：生成的 CI 会强制更新该分支，并维护一条返回 `--base-branch` 的 Pull Request。已有仓库不要把 `--force` 当作维护方式，因为它可能替换有意制定的策略；请先运行 `smif config sync --check`。

