Git Tag 使用文档
1. 概述
Git Tag 是 Git 版本控制系统中用于标记特定提交的功能,通常用于标记发布版本、里程碑或重要的代码点。在项目中,我们使用 Git Tag 来管理软件版本,便于追踪和回溯。
2. 项目中的 Git Tag 管理工具
本项目提供了一个交互式的 Git Tag 管理工具,位于 scripts/git-tag-cli.js。该工具可以帮助开发者快速创建和推送 Git Tag,并自动生成版本文件。
2.1 工具功能
- 自动检测当前分支
- 检查未提交的更改
- 自动生成建议版本号
- 验证语义化版本格式
- 交互式输入版本号和描述
- 自动创建并推送 Git Tag
- 可选择生成版本文件
- 可选择构建项目
2.2 工具依赖
- Node.js
- Git
3. 如何使用 Git Tag 管理工具
3.1 基本使用
在项目根目录下运行以下命令:
bash
node scripts/git-tag-cli.js或通过 npm 脚本运行(如果已配置):
bash
npm run tag3.2 操作流程
- 工具启动后,会显示当前分支信息
- 检查是否有未提交的更改
- 自动生成建议版本号
- 提示用户输入版本号(可使用默认值)
- 提示用户输入标签描述(可选)
- 显示操作确认信息
- 用户确认后,创建并推送 Git Tag
- 询问是否生成版本文件
- 询问是否构建项目
- 显示操作结果
4. 版本号规范
本项目使用语义化版本号规范(Semantic Versioning),格式为:
vX.Y.ZX:主版本号,当你做了不兼容的 API 修改Y:次版本号,当你做了向下兼容的功能性新增Z:修订号,当你做了向下兼容的问题修正
4.1 示例
v1.0.0:初始版本v1.0.1:修复了一个 bugv1.1.0:添加了新功能v2.0.0:做了不兼容的 API 变更
4.2 注意事项
- 版本号必须以
v开头 - 工具会自动为没有
v开头的版本号添加v - 工具会验证版本号格式是否符合语义化版本规范
5. 版本文件生成
当创建 Git Tag 后,可以选择生成版本文件。版本文件生成脚本位于 scripts/generate-version.js,会生成一个 version.json 文件到 public 目录。
5.1 版本文件内容
json
{
"version": "v1.0.0",
"build": "abc123",
"commitTime": "2025-12-17T10:00:00+08:00",
"buildTime": "2025-12-17 10:00:00"
}version:当前 Git Tagbuild:Git Commit Hash(短版本)commitTime:Git 提交时间buildTime:版本文件生成时间
6. 版本检查机制
项目中的 src/common/updateChecker.js 会定期检查版本更新,当发现新版本时会在控制台显示更新信息。
6.1 检查逻辑
- 获取本地
version.json文件中的版本信息 - 获取远程
version.json文件中的版本信息 - 比较版本号和构建号
- 如果发现新版本,在控制台显示更新信息
6.2 控制台输出格式
========================================
🔄 发现新版本!
========================================
┌─────────────────┬─────────────────────────┐
│ (index) │ Values │
├─────────────────┼─────────────────────────┤
│ 本地版本 │ "v1.0.0" │
│ 本地构建号 │ "abc123" │
│ 本地提交时间 │ "2025-12-17T10:00:00..."│
│ 远程版本 │ "v1.0.1" │
│ 远程构建号 │ "def456" │
│ 远程提交时间 │ "2025-12-17T11:00:00..."│
└─────────────────┴─────────────────────────┘
========================================7. 完整的版本发布流程
- 在开发分支完成功能开发和测试
- 合并到主分支(如
master或main) - 运行
node scripts/git-tag-cli.js创建 Git Tag - 选择生成版本文件
- 选择构建项目
- 部署构建产物到服务器
8. 常用 Git Tag 命令
8.1 查看所有标签
bash
git tag8.2 查看标签列表(带详细信息)
bash
git tag -l --format="%(refname:short)\t%(taggerdate:short)\t%(subject)"8.3 按模式搜索标签
bash
git tag -l "v1.*" # 查看所有 v1.x.x 版本8.4 按时间排序查看标签
bash
git tag --sort=-creatordate # 降序排列(最新的在前)
git tag --sort=creatordate # 升序排列(最旧的在前)8.5 查看标签详情
bash
git show v1.0.08.6 创建轻量标签
bash
git tag v1.0.08.7 创建带注释的标签
bash
git tag -a v1.0.0 -m "版本 1.0.0 发布"8.8 创建带签名的标签(GPG)
bash
git tag -s v1.0.0 -m "版本 1.0.0 发布"8.9 验证签名标签
bash
git tag -v v1.0.08.10 推送单个标签
bash
git push origin v1.0.08.11 推送所有标签
bash
git push origin --tags8.12 删除本地标签
bash
git tag -d v1.0.0
# 删除远程仓库的标签 (先删本地,再推送到远程)
git tag -d v1.0.0
git push origin :refs/tags/v1.0.0
# 或者使用更直观的删除远程标签命令 (Git v1.7.0 之后)
git push origin --delete v1.0.08.13 删除远程标签
bash
git push origin :refs/tags/v1.0.08.14 批量删除本地标签
bash
git tag -d $(git tag -l "v0.*") # 删除所有 v0.x.x 版本的本地标签8.15 批量删除远程标签
bash
git push origin --delete $(git tag -l "v0.*") # 删除所有 v0.x.x 版本的远程标签8.16 切换到特定标签
bash
git checkout v1.0.08.17 基于标签创建分支
bash
git checkout -b branch-from-tag v1.0.08.18 查看标签的提交历史
bash
git log v1.0.0 --oneline8.19 查看特定版本范围的标签
bash
git tag --merged master # 查看已合并到 master 分支的标签8.20 同步远程标签到本地
bash
git fetch origin --tags8.21 检查本地标签与远程标签的差异
bash
git fetch origin
git tag -l > local-tags.txt
git ls-remote --tags origin | awk '{print $2}' | sed 's/refs\/tags\///' > remote-tags.txt
diff local-tags.txt remote-tags.txt8.22 查看标签对应的提交哈希
bash
git rev-parse v1.0.08.23 获取最近的标签
bash
git describe --tags --abbrev=08.24 获取当前提交的标签及距离
bash
git describe --tags # 输出格式:v1.0.0-5-gabc1238.25 列出包含特定提交的标签
bash
git tag --contains abc1239. 最佳实践
- 只在稳定版本上创建 Git Tag
- 使用语义化版本号规范
- 为每个标签添加有意义的注释
- 定期清理不再使用的标签
- 确保在推送标签前所有更改都已提交
- 每次发布新版本时都生成版本文件
10. 常见问题
10.1 如何处理未提交的更改
如果有未提交的更改,工具会给出警告并询问是否继续。建议先提交或暂存更改,以确保标签指向正确的代码状态。
10.2 如何回滚标签
如果创建了错误的标签,可以使用以下步骤回滚:
- 删除本地标签:
git tag -d v1.0.0 - 删除远程标签:
git push origin :refs/tags/v1.0.0 - 重新创建正确的标签
10.3 如何查看标签对应的提交
bash
git show v1.0.010.4 如何在特定提交上创建标签
bash
git tag -a v1.0.0 abc123 -m "版本 1.0.0 发布"其中 abc123 是提交的哈希值。
11. 总结
Git Tag 是管理软件版本的重要工具,本项目提供的交互式工具可以简化 Git Tag 的创建和推送流程。遵循语义化版本号规范和最佳实践,可以帮助团队更好地管理和追踪软件版本。
通过版本检查机制,用户可以及时了解到新版本的发布,提高软件的更新率和用户体验。