我习惯用Git来管理自己的代码项目,由于自己过去参与开发思源笔记这个笔记软件的的主题外观,我需要把开发的主题外观代码要放在GitHub上。并且我不仅仅要写代码,更要给每次更改加tag、发版,才能被大家用上、大家才能看到更新。后面渐渐地,自己也有了一点点代码版本管理的心得。

以自己开发的钙信号提取软件为例,介绍下自己目前的代码版本管理方法

CHANGELOG.md

现在的代码项目我都会创建一个CHANGELOG.md,这个文件我会记录自己每次更新了什么,每个版本新增了什么功能、修复的错误、改进的性能,这样可以记录这个代码项目的版本演变,有个清晰的变更记录。我习惯使用Gitmoji的方式记录和提交commit,即使用emoji以有趣直观的方式来对每个commit进行分类。可以一眼区分是🐛bug,✨功能改进,还是📝文档完善。

为了方便输入emoji,我会用两个插件

release.sh

为了保存每个版本那时的代码,我还会在每次版本发布的时候,打上tag,git打tag的命令是

1
2
3
4
# 打tag
git tag <tagname>
# 提交tag
git push origin --tags

为了简便打tag发布到GitHub的流程,我还会创建一个release.sh脚本,运行就自动打上tag,不需要每次都输入代码命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Change directory to the script's directory
cd "$(dirname $0)"

# Get version from theme.json
version=v1.0.6

# Commit changes
git add .
git commit -m "🔖 $version"
git push

# 判断 tag 是否存在
if git rev-parse --quiet --verify $version >/dev/null; then
# 删除本地仓库中的 tag
git tag -d $version
# 删除远程仓库中的 tag
git push origin ":refs/tags/$version"
fi

# 创建新的 tag
git tag $version # Create a tag

# 推送新的 tag 到远程仓库
git push origin --tags

这样,我在Github就可以保存每个版本的快照,万一有问题,也可以回溯

通过Github Action发布Release

如果有必要也可以创建Release发版,可以写一个Github Action创建步骤,打完标签,就自动发版

Github Action创建步骤

  • 在你的项目根目录下,创建一个文件夹.github/workflows
  • 在该文件夹中创建一个新的YAML文件,例如release.yml

release.yml的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: Create Release on Tag

on:
push:
tags:
- 'v*' # 监听以v开头的标签

jobs:
release:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Create GitHub Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: ${{ github.ref }}
draft: false
prerelease: false

自动发版