在软件开发过程中,每当我们的软件有了新的功能或者修复了一些bug,我们都需要升级版本号后重新发布. 那么我们如何通过Git,保留特定版本的代码呢?
对于上面描述的问题,通常我们的解决方案有两种: 1.创建特定的版本分支; 2.在每次发版前,通过tag进行记录。
方案一
-
方案描述
这种方式的操作方式比较简单,在每次发版后,以当前版本的代码为基础创建一个新的分支(以新的版本号命名的分支,如:release/v1.0.0, release/v1.1.0 等),然后在该分支的基础上进行新的版本需求开发。
-
特点
- 在前一个版本发版后操作(创建新的分支)
- 操作简单
-
缺点
- 随着版本的迭代,远程分支会越来越多
-
示例
没有相关的复杂操作,只需要管理员在上个版本的基础上创建一个新的版本分支即可
方案二
-
方案描述
在当前版本需要发布前,在当前commit进行一次打tag操作.
git tag v1.0.0或者git tag -a v1.0.0 -m "relase v1.0.0". git 可以通过这种打tag的方式,将当前分支的最新的commitId进行记录,并保存,当我们切换到该tag,即回到了这个版本。这种方案可以非常快速的回到某一个版本,并且解决方案一的缺点,不需要创建非常多的版本分支,所有版本在一个分支上进行开发. -
特点
- 在发版前进行打tag操作
-
缺点
- 操作难度稍微高一点
- 在修复版本bug时,不可避免的需要创建一些新的临时分支,并在回顾测试通过后,(此时可以在打一个新的tag,通常bug修复会有小的版本号提示),将代码合入到主分支(此处的主分支不特指master分支,指的是我们通过该方案实现的所有版本所在的分支)
-
示例
# 1. 拉取当前最新版本分支代码
git fetch origin release
# 2. 切换到该分支
git branch release
git checkout release
或者
git checkout -b release
# 3. 在当前位置打tag
git tag v1.0.0
git tag -a v1.0.0 -m "release v1.0.0"
# 4. 将本地的tag push到远程
git push originn v1.0.0
-------------------------------
# 5. 当出现bug需要修复时,拉取该tag的代码,并创建本地分支进行修改和提PR
git pull origin tag v1.0.0 // 获取远程的tag
git chekcout -b bugfix v1.0.0 # 以v1.0.0 的代码创建并切换一个本地分支bugfix
# 6. bugfix
# 7. bug 修复并回测完成后, 添加tag并push到远程
git tag -a v1.0.1 -m "bugfix v1.0.1"
git push origin v1.0.1
总结
这两种方案都是有利有弊,现在工作中使用的是第一种方法,经过验证,基本上没有什么问题,可以正常用于开发过程中。第二种方案,是学习tag过程中的总结,整体效果有待实践。
如果在学习和使用过程中发现什么问题,欢迎随时交流~
有关Git tag相关的命令可参考:git-scm.com/book/zh/v2/…