40 图 | SVN 开发流程优化

maxh718
发布于 2022-11-30 16:38
浏览
0收藏

前言

最近和一个研发团队打交道的比较多,了解到他们的代码管理用的是 SVN 工具,不是用的 Gitlab。

SVN(Subversion):集中式管理的版本控制系统,很多操作需要连上公共的 SVN 服务器才能操作,断网了则不能提交代码。简单易上手。SVN 创建分支其实需要先在远程服务器创建。。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

SVN 集中式管理的示意图

Git:是分布式管理的版本控制系统,很多操作在本地就能完成,即使断网了也能提交代码到本地分支。功能强大较复杂。很多操作支持离线操作。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

Git 分布式管理的示意图

他们使用 SVN 来管理代码仓库已经很久了,而且只有一个代码分支。为了优化他们的开发流程,悟空整理了一版基于 SVN 的多版本控制的开发流程,其中借鉴了 Git 的版本控制的思想。

有同学可能会疑问:为什么不切换到 Gitlab?

因考虑到目前部署和安全等多个因素,暂时不会切换到 Gitlab,需要一个过渡期。

接下来我们来看下用 SVN 如何做版本管理,如何优化开发、测试流程。

一、分支管理

SVN 服务的目录管理

40 图 | SVN 开发流程优化-鸿蒙开发者社区

branches 目录:存放非主干分支的目录,其中有一个 develop 目录作为开发分支,其他与 develop 的同级目录作为日常开发分支、Bug 修复分支、热修复分支。

因 SVN 的多个版本其实都是拷贝的原文件目录,所以版本不宜过多,代码包的整体大小不宜过大,控制在 100 M 以内。

trunk 目录:作为存放主干分支代码的目录

测试环境部署的是 develop 分支,当测试环境验证通过后,将 develop 分支 merge 到 trunk 分支上。

另外我们没有用到 Tags 这个概念,为了降低前期的流程复杂度。

分支命名

因 SVN 没有类似 Gitlab 的 issue 功能,所以分支的命名是不带 issue id 的,用的日期作为标识。

trunk:主干分支,不可重命名,不可删除。

develop: 开发分支,不可重命名,不可删除。

功能分支:feature_{日期}_{功能}。如:feature_20220809_login。

bug 修复分支:fix_{日期}_{功能}。如:fix_20220809_login。

热修复分支(hotfix):hotfix_{日期}_{修复功能}。如:hotfix_20220801_loginBug。

二、日常开发流程

开发流程和基于 Gitlab 的流程类似,但是 SVN 的功能没有 Gitlab 功能强大,所以有些细节不太一样。

整理了两种风格的开发流程,方便查看。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

列表形式

40 图 | SVN 开发流程优化-鸿蒙开发者社区

流程图形式

三、热修复流程

当生产环境遇到紧急bug 时,可以考虑基于主干分支 trunk 分出一个 hotfix 分支,改完后,先提交到 hotfix 分支上,然后将 hotfix 分支merge 到 trunk 分支上,生产环境部署和验证通过后,再将 trunk 代码 merge 回 develop 分支,保持 develop 分支和 trunk 分支一致。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

热修复流程

四、特殊流程

4.1 冲突解决

两个开发人员对同一个文件进行修改,彼此代码出现覆盖的情况就称为冲突。在较短的时间内,两个程序员对同一个文件同一处代码开发,后上传的会覆盖先上传的。

分两种冲突情况:

(1)对同一文件不同的代码处进行修改

后提交者,先更新自己的本地 develop 分支,然后merge到自己的开发分支,他人的代码和你的代码都会保留下来,然后再提交自己的分支代码,merge 分支到develop 分支。

(2)对同一文件的相同代码处进行修改

  • 与冲突的那位同事商量,是用他的,还是用你的
  • 如果用你的,先备份自己的代码,然后 revert 自己的改动,获取最新的代码,然后将自己的所有改动都覆盖上去。
  • 如果用他的,先备份自己的代码,然后 revert 自己的改动,获取最新的代码。然后将其他的改动更新上去。(需要手动改,不要改动冲突处)

五、开发流程演示

SVN中常用的概念和操作如下:

  • Repository(源代码库):源代码统一存放的地方。
  • Checkout(提取):该操作用于从 Repository 中提取一份源代码到本地。
  • Commit(提交):该操作用于将修改代码后的代码提交到 Repository。
  • Update(更新):该操作用于同步本地源代码与 Repository 中的源代码。

SVN 客户端工具:TortoiseSVN

5.1 准备工作

准备工作阶段一般由项目的开发负责人来处理。

需要做的事情是在远程仓库创建 trunk 主干分支,上传项目初始代码到这个分支。

5.1.1 初始化 svn 项目

首先在 svn 服务器上创建一个仓库,

这里我用 docker 命令创建了一个仓库:ccm-repo

docker exec -it svn-server svnadmin create ccm-repo

然后需要添加用户名和密码。进入到 svn-server 容器中,修改 /var/opt/svn/ccm-repo/conf 目录下的passwd、authz、 svnserve.conf 文件。

我们可以通过 TortoiseSVN 登录到 SVN 服务器上查看仓库的目录情况:

40 图 | SVN 开发流程优化-鸿蒙开发者社区

5.1.2 clone 仓库到本地

使用 TortoiseSVN 工具执行 SVN Checkout 操作

40 图 | SVN 开发流程优化-鸿蒙开发者社区

选择一个本地目录存放这个仓库。仓库地址路径为 svn://192.168.56.11/ccm-repo,本地路径为:E:\ccm。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

5.1.3 准备 trunk 目录和 branchs 目录

拉取下来的项目是一个空项目,我们需要在根目录创建主干目录和分支目录。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

创建 trunk 目录和 branchs 目录。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

trunk 目录就是主干的顶级目录,直接在里面放项目代码就可以了。主干的目录命名为 trunk 是规范命名,和 Gitlab 的 master 含义一样。

5.1.4 提交初始代码到主干

5.1.4.1 添加源代码

我们可以将项目的初始代码拷贝到 trunk 目录。比如我在 trunk 目录下创建了一个 src 文件夹,用来存放源代码,里面添加了一个 member.java 文件。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

可以看到我们有三项改动,添加 trunk 目录、添加 src 目录、添加 member.java 文件。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

添加成功后,会提示具体改动了哪些项。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

5.1.4.2 提交改动到远程仓库

当然,这个添加都是本地磁盘操作,还没有上传到 SVN 服务器,我们可以通过 TortoiseSVN Commit 改动到服务器。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

5.1.4.3 查看远程仓库的版本

提交到 SVN 服务器后,我们可以通过 TortoiseSVN 工具查看远程仓库的版本。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

5.1.5 创建 develop 分支

首先我们需要将之前创建的 branchs 提交到远程仓库。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

基于 trunk 主干分支创建 develop 分支,存放到 branchs 目录。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

如果创建失败,可以尝试勾选 create intermediate folders。

之后就会在远程仓库创建 develop 分支,本地是没有 /branchs/develop 目录的。如下图所示的SVN远程仓库的目录。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

如果本地想看到 develop 分支,执行 SVN update 操作就可以了。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

5.2 开发新功能或修复 bug

基于 develop 分支创建一个新的本地开发分支 feat_20220922_Login

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

远程仓库就会创建一个 feat_20220922_Login 分支,SVN update 获取这个分支。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

修改代码并提交代码到当前分支 feat_20220922_Login。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

远程仓库也可以看到开发分支的改动。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

5.3 Code Review

方式:自己的分支开发完成后,开发组长到组员座位上进行 Code Review。

Review 没问题后,进行下一步。

5.4 合并开发分支到 develop 分支

开发人员自己将开发分支合并到 develop 分支中。develop 分支会被用来部署测试环境。

首先选中 develop 分支,然后用 SVN Merge 执行合并。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

可以选择远程仓库的 feat_20220922_Login 分支合并到 develop 分支。这个操作只会修改本地的 develop 分支,我们还需要执行 SVN Commit 操作才能将改动提交到远程仓库的 develop 分支。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

将 develop 的改动提交到远程仓库。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

40 图 | SVN 开发流程优化-鸿蒙开发者社区

远程仓库 develop 已经可以看到改动了。

40 图 | SVN 开发流程优化-鸿蒙开发者社区

5.5 部署 develop 分支到测试环境

这个由测试人员在测试环境拉取 develop 分支的最新代码,并部署测试环境。

5.6 合并 develop 分支到主干分支

测试环境验证通过后,将 develop 分支合并到 trunk 主干分支

5.7 收尾工作

在远程仓库上删除开发分支。

六、总结

本篇只是利用 SVN 来优化项目中的开发测试流程,以及如何对 SVN 进行相关的操作,没有涉及到 SVN 的底层原理,以及 SVN 其他的功能,感兴趣的同学可以到官网查看,也可以等我更新啊~

参考资料:

​https://subversion.apache.org/docs/​

​https://svnbook.red-bean.com/​

​https://www.php.cn/tool/git/484903.html​


本文转载自公众号:悟空聊架构

分类
标签
已于2022-11-30 16:38:07修改
收藏
回复
举报
回复
    相关推荐