当前位置: 首页 > 科技观察

40图-SVN开发流程优化

时间:2023-03-13 20:46:46 科技观察

大家好,我是悟空~本文主要内容如下:前言最近和一个研发团队打交道很多,了解到他们的代码管理使用的是SVN工具,而不是Gitlab。SVN(Subversion):集中管理的版本控制系统。很多操作都需要连接到公共的SVN服务器上才能操作。如果网络断开,则无法提交代码。简单易用。在SVN中创建分支其实就是复制目录,开销很大。SVN集中管理示意图Git:是分布式管理的版本控制系统。很多操作都可以在本地完成,即使断网也可以将代码提交到本地分支。强大而复杂。许多操作支持离线操作。Git分布式管理示意图他们很早就使用SVN来管理代码仓库,代码分支只有一个。为了优化他们的开发流程,悟空整理了一个版本的基于SVN的多版本控制开发流程,借鉴了Git的版本控制的思想。可能有同学会问:为什么不改用Gitlab呢?考虑到当前部署和安全等多重因素,我们暂时不会切换到Gitlab,需要一个过渡期。下面我们就来看看如何使用SVN进行版本管理,以及如何优化开发测试流程。1.分支管理SVN服务branches目录的目录管理:存放非主干分支的目录,其中一个是develop目录作为开发分支,其他与develop同级的目录作为日常开发分支,错误修复分支和热修复分支。因为SVN的多个版本其实都是原文件目录的副本,所以版本不宜过多,代码包整体大小不宜过大,控制在100M以内。trunk目录:作为主要分支代码存放目录,测试环境部署develop分支。测试环境验证通过后,将develop分支合并到trunk分支。另外,我们没有使用Tags的概念,以减少前期流程的复杂度。分支命名因为SVN没有类似Gitlab的issue功能,所以分支命名没有issueid,以日期作为标识。trunk:主干分支,不可重命名,不可删除。develop:开发分支,不可重命名,不可删除。功能分支:feature_{date}_{feature}。如:feature_20220809_login。错误修复分支:fix_{date}_{feature}。如:fix_20220809_login。Hotfix分支(hotfix):hotfix_{date}_{fixfunction}。如:hotfix_20220801_loginBug。2.日常开发流程开发流程和基于Gitlab的流程类似,但是SVN的功能没有Gitlab强大,所以有些细节上有所不同。整理了两种风格的发展历程,方便大家观看。Listformflowchartform3.hotfix流程当生产环境遇到紧急bug时,可以考虑在trunk分支trunk的基础上分出一个hotfix分支。修改后,先提交到hotfix分支,再将hotfix分支合并到trunk分支上面,生产环境部署验证通过后,将trunk代码合并回开发分支,保持开发分支一致树干分支。热修复过程4.特殊过程4.1冲突解决当两个开发人员修改同一个文件时,彼此代码重叠的情况称为冲突。短时间内,两个程序员在同一个文件中开发相同的代码,后上传的会覆盖早上传的。有两种冲突情况:(1)修改同一个文件的不同代码后,提交者先更新自己本地的develop分支,然后合并到自己的develop分支,别人的代码和你的代码都会保留,然后Then提交自己的分支代码,合并分支为开发分支。(2)修改同一个文件中相同代码并与之冲突的同事应该讨论是否使用他的或你的。如果您使用自己的代码,请先备份您自己的代码,然后还原您自己的更改以获取最新代码,并覆盖您的所有更改。如果您使用他的,请先备份您自己的代码,然后恢复您自己的更改以获取最新代码。然后更新其他更改。(需要手动更改,不要更改冲突)五、开发过程演示SVN中常用的概念和操作如下:Repository(源代码库):统一存放源代码的地方。Checkout(提取):这个操作用于从Repository中提取一个源码到本地。Commit:该操作用于将修改后的代码提交到Repository。Update:该操作用于同步本地源代码和Repository中的源代码。SVN客户端工具:TortoiseSVN5.1准备准备阶段一般由项目开发负责人负责。需要做的是在远程仓库中创建一个trunk主干分支,将项目的初始代码上传到这个分支。5.1.1初始化svn项目首先在svn服务器上创建一个仓库。这里我使用docker命令创建仓库:crm-repodockerexec-itsvn-serversvnadmincreatecrm-repo然后需要添加用户名和密码。进入svn-server容器,修改/var/opt/svn/crm-repo/conf目录下的passwd、authz、svnserve.conf文件。我们可以通过TortoiseSVN登录SVN服务器查看仓库的目录:5.1.2将仓库克隆到本地使用TortoiseSVN工具进行SVNCheckout操作,选择本地目录存放仓库。仓库地址路径为svn://192.168.56.11/crm-repo,本地路径为:E:\crm。5.1.3准备主干目录和分支目录拉取的项目是一个空项目,我们需要在根目录下创建主干目录和分支目录。创建主干目录和分支目录。trunk目录是trunk的顶层目录,项目代码放在里面即可。名为trunk的trunk目录是一个标准名称,与Gitlab的master含义相同。5.1.4提交初始代码到主干5.1.4.1添加源代码我们可以将项目的初始代码复制到主干目录。比如我在trunk目录下创建了一个src文件夹用来存放源代码,并在里面添加了一个member.java文件。可以看到我们做了三处改动,增加了trunk目录,增加了src目录,增加了member.java文件。添加成功后会提示修改了哪些项目。5.1.4.2Commitchangestotheremotewarehouse当然,这个添加都是本地磁盘操作,并没有上传到SVN服务器。我们可以通过TortoiseSVNCommit更改到服务器。5.1.4.3查看远程仓库版本提交到SVN服务器后,我们可以通过TortoiseSVN工具查看远程仓库的版本。5.1.5创建develop分支首先我们需要将之前创建的分支提交到远程仓库。在trunk主干分支的基础上创建develop分支,存放在branches目录下。如果创建失败,可以尝试勾选createintermediatefolder。之后会在远程仓库中创建develop分支。本地没有/branchs/develop目录。SVN远程仓库的目录如下图所示。如果想在本地看到develop分支,执行SVN更新操作即可。5.2开发新功能或修复bug在develop分支feat_20220922_Login的基础上新建一个本地开发分支,远程仓库会创建一个feat_20220922_Login分支,SVN更新会得到这个分支。修改代码提交到当前分支feat_20220922_Login。远程存储库也可以看到对开发分支所做的更改。5.3CodeReview方式:自己分支开发完成后,开发组组长到组员座位上进行一次CodeReview。审核OK后,进行下一步。5.4将开发分支合并到开发分支开发者自己将开发分支合并到开发分支中。develop分支将用于部署测试环境。先选择develop分支,然后用SVNMerge进行合并。可以选择将远程仓库的feat_20220922_Login分支合并到develop分支中。这个操作只会修改本地的develop分支,我们还需要执行SVNCommit操作将修改提交到远程仓库的develop分支。将更改从develop提交到远程存储库。远程仓库develop已经可以看到变化了。5.5部署开发分支到测试环境。测试人员在测试环境中拉取develop分支的最新代码,部署到测试环境中。5.6将develop分支合并到trunk分支测试环境验证通过后,将develop分支合并到trunk主干分支5.7收尾工作删除远程仓库上的develop分支。6.小结本文仅使用SVN优化项目中的开发测试过程,以及如何在SVN上进行相关操作。不涉及SVN的底层原理和SVN的其他功能。感兴趣的同学可以去官网查看。可以等我更新~参考资料:https://subversion.apache.org/docs/https://svnbook.red-bean.com/https://www.php.cn/tool/git/484903.html