本文目录导读:

“自动版本号更新”通常指的是在软件开发或文档管理中,让系统自动增加或修改版本号,而无需人工手动编辑,这能有效避免版本混乱,尤其是在持续集成/持续部署(CI/CD)流程中。
实现方式取决于你使用的开发语言、构建工具或版本管理系统,以下是几种主流场景下的解决方案:
使用 Git 标签(最推荐)
这是最符合语义化版本规范的方式,版本号只在你发布(打标签)时改变,而非每次提交都变。
- 原理:利用 Git 的
tag命令,在 CI/CD(如 GitHub Actions, GitLab CI, Jenkins)中,当合并到主分支或发布时,自动打一个标签。 - 工具:
standard-version(Node.js),semantic-release(通用),git-cliff(Rust)。 - 示例(语义化版本):
- 如果你的 commit 信息包含
feat:,系统自动将0.0变成1.0。 - 如果包含
fix:,自动变成0.1。
- 如果你的 commit 信息包含
使用构建工具的内置功能
A. Node.js / JavaScript
-
npm:在
package.json中修改version字段。# 自动更新补丁号 (1.0.0 -> 1.0.1) npm version patch # 自动更新次版本号 (1.0.0 -> 1.1.0) npm version minor # 自动更新主版本号 (1.0.0 -> 2.0.0) npm version major
这会自动创建一个 Git commit 和 Tag。
-
Vite / Webpack:通常通过插件或环境变量实现,例如在
vite.config.ts中读取package.json的version。
B. Java / Gradle (Android) / Maven
-
Gradle:通常在
build.gradle或gradle.properties中定义。// 方式1:手动定义,通过CI/CD替换 version = "1.0.0" // 方式2:自动获取Git提交计数(常用于Android) def versionCode = System.getenv("VERSION_CODE") ?: gitCommitCount() versionName = "1.0.$versionCode" -
Maven:使用
maven-release-plugin或versions-maven-plugin。# 自动更新版本号并打标签 mvn release:prepare
C. Python
- Poetry:
poetry version patch - setuptools:通过
setup.cfg或setup.py,结合 CI 环境变量。 - bumpversion/bump2version(旧但稳定):读取配置文件,自动修改多个文件中的版本号。
在 CI/CD 流程中自动生成
这是最“自动化”的方式,版本号通常与流水线编号或Git 提交哈希绑定。
-
示例:构建号 + Git SHA
- 一个常见的做法是:
0.0.${BUILD_NUMBER}或0.0-${GIT_SHORT_SHA}。 - Jenkins:使用环境变量
${BUILD_NUMBER}。 - GitHub Actions:使用
github.run_number或github.sha。 - GitLab CI:使用
CI_PIPELINE_ID。
- 一个常见的做法是:
-
示例:基于日期
04.10.01(年.月.日.当日构建序号)。
PowerShell / Bash 脚本(全流程控制)
如果你需要完全自定义,可以写一个简单的脚本:
Bash 脚本示例(自增补丁号):
#!/bin/bash
# 读取当前版本 (假设存在 version.txt)
CURRENT_VERSION=$(cat version.txt)
# 分割版本号 (1.2.3)
IFS='.' read -ra ADDR <<< "$CURRENT_VERSION"
MAJOR=${ADDR[0]}
MINOR=${ADDR[1]}
PATCH=${ADDR[2]}
# 增加补丁号
PATCH=$((PATCH + 1))
# 组合新版本
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
# 写入文件
echo $NEW_VERSION > version.txt
echo "Updated to version: $NEW_VERSION"
核心建议:选择哪种策略?
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 开源库 / 正式发布 | Git 标签 + 语义化版本 | 清晰、规范、可追溯,如 npm version 或 semantic-release。 |
| 内部测试 / 快速迭代 | CI 构建号 + Git SHA | 唯一性强,能精确定位代码,在 CI 环境变量中获取即可。 |
| 小团队 / 简单项目 | npm version / Poetry poetry version | 命令行一行搞定,集成在 package.json 或 pyproject.toml 中。 |
| 多环境部署(如 Android) | Gradle 脚本 + Git 提交次数 | 保证版本号单调递增,且能区分不同构建。 |
如果你能提供更具体的开发环境(如:是 iOS 开发?Java 后端?还是 Python 脚本?),我可以给出更详细的代码示例。