# 更新版本

把软件包版本、内部依赖要求、变更日志和已消费变更集作为一项发布操作进行校验和应用。

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



`smif version` 执行发布过程中会修改文件的部分。已经启用生成的 GitHub Actions 工作流时，同一次发布应使用 [`smif ci`](https://semifold.noctisynth.org/zh/docs/commands/ci/)，不要再在本地运行这条命令。

```bash
smif version --dry-run
smif version
```

## 规划与校验 [#规划与校验]

命令会重新计算 `smif status` 展示的同一项版本决定，再让每个内置适配器或仓库插件生成确定性的清单修改。正常写入开始前，Semifold 会校验目标路径、预期文件哈希、修改冲突、变更日志模板、软件包身份和完整依赖图。

正常执行可能修改：

* 软件包版本和符合条件的内部依赖要求；
* 工作区共享版本来源；
* 软件包变更日志；
* 一次性的 `channel-bump` 配置；
* 已经消费的变更集文件；
* 配置的版本修改后命令（`post-version`）。

## 工作区保护 [#工作区保护]

命令默认拒绝不干净的 Git 工作区。`--allow-dirty` 表示现有差异有意参与这次操作，不代表无关修改已经变得安全。

## 预演 [#预演]

`--dry-run` 会准备并校验发布，但不执行正常的文件写入。配置明确设置 `dry-run = true` 的版本修改后命令仍然会运行，因此这种命令必须可以安全重复执行。

## 失败与恢复 [#失败与恢复]

规划或校验失败时，软件包文件和变更集保持不变。如果已经应用文件修改后某个版本修改后命令失败，Semifold 会保留这些修改和变更集，并报告失败命令与恢复事实。请检查 Git diff、修复钩子后重试，不要手工删除变更集。

成功后，在把生成内容提交到配置的发布分支之前，仍应运行测试并审查完整差异。

## GitHub 错误诊断 [#github-错误诊断]

GitHub 操作失败时会显示失败操作、HTTP 状态、API 消息，以及可用的校验详情和文档链接。客户端错误保留底层错误链。这些信息无需开启 `--debug`，GitHub token 会被遮蔽。403 会按操作提供权限检查提示，但不会将原因一律断定为权限不足。

changelog 的 PR 元数据查询失败仍为警告，同时显示受影响的包及 GitHub 诊断。版本准备会继续执行，仅缺少对应远程元数据。

