40 図 | SVN 開発プロセスの最適化

こんにちは、悟空です〜

この記事の主な内容は次のとおりです。

写真

序文

最近、私は R&D チームと頻繁にやり取りをしており、彼らのコード管理には Gitlab ではなく SVN ツールが使用されていることを知りました。

SVN (Subversion): 集中管理を行うバージョン管理システムです。多くの操作を実行するには公開 SVN サーバーに接続する必要があります。ネットワークが切断されている場合、コードを送信できません。シンプルで使いやすい。SVN でブランチを作成するには、実際には最初にリモート サーバー上にブランチを作成する必要があります。

写真

SVN集中管理の概念図

Git: 分散管理のためのバージョン管理システムであり、多くの操作をローカルで完了でき、ネットワークが切断されていてもコードをローカル ブランチに送信できます。パワフルかつ複雑。多くの操作はオフライン操作をサポートしています。

写真

Git分散管理の概念図

彼らは長い間 SVN を使用してコード リポジトリを管理してきましたが、コード ブランチは 1 つだけです。開発プロセスを最適化するために、Wukong は、Git のバージョン管理のアイデアを借用した、SVN ベースのマルチバージョン管理開発プロセスのバージョンをコンパイルしました。

学生の中には「なぜ Gitlab に切り替えないの?」と尋ねる人もいるかもしれません。

現在のデプロイメントやセキュリティなどの複数の要素を考慮して、当面は Gitlab に切り替えず、移行期間が必要です。

次に、バージョン管理に SVN を使用する方法と、開発およびテストのプロセスを最適化する方法を見てみましょう。

1.支店管理

SVN サービスのディレクトリ管理

写真

ブランチ ディレクトリ: 非トランク ブランチを格納するディレクトリ。開発ブランチとしての開発ディレクトリ、および毎日の開発ブランチ、バグ修復ブランチ、およびホットフィックス ブランチとしての開発と同じレベルの他のディレクトリが含まれます。

SVN の複数のバージョンは実際には元のファイル ディレクトリのコピーであるため、バージョンが多すぎてはならず、コード パッケージ全体のサイズが大きすぎてはならず、100 M 以内に制御する必要があります。

トランクディレクトリ: メインブランチコードを格納するディレクトリとして

テスト環境では開発ブランチがデプロイされ、テスト環境が検証された後、開発ブランチはトランク ブランチにマージされます。

さらに、初期のプロセスの複雑さを軽減するために、タグの概念は使用しませんでした。

ブランチの命名

SVN には Gitlab のような発行機能がないため、ブランチには発行 ID なしで名前が付けられ、日付が識別として使用されます。

トランク: トランク ブランチ。名前の変更や削除はできません。

開発: 開発ブランチ。名前の変更や削除はできません。

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

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

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

二、日常开发流程

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

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

写真

列表形式

写真

流程图形式

三、热修复流程

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

写真

热修复流程

四、特殊流程

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 服务器上查看仓库的目录情况:

写真

5.1.2 clone 仓库到本地

使用 TortoiseSVN 工具执行 SVN Checkout 操作

写真

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

写真

5.1.3 准备 trunk 目录和 branchs 目录

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

写真

创建 trunk 目录和 branchs 目录。

写真

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

5.1.4 提交初始代码到主干

5.1.4.1 添加源代码

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

写真

写真

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

写真

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

写真

5.1.4.2 提交改动到远程仓库

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

写真

写真

写真

5.1.4.3 查看远程仓库的版本

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

写真

5.1.5 创建 develop 分支

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

写真

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

写真

写真

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

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

写真

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

写真

5.2 开发新功能或修复 bug

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

写真

写真

写真

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

写真

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

写真

写真

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

写真

5.3 Code Review

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

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

5.4 合并开发分支到 develop 分支

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

まず開発ブランチを選択し、次に SVN Merge を使用してマージを実行します。

写真

リモート ウェアハウスの feat_20220922_Login ブランチを開発ブランチにマージすることを選択できます。この操作ではローカルの開発ブランチのみが変更されます。また、SVN コミット操作を実行して変更をリモート ウェアハウスの開発ブランチに送信する必要があります。

写真

写真

写真

開発上の変更をリモート リポジトリに送信します。

写真

写真

リモート倉庫開発ではすでに変化を確認できています。

写真

5.5 開発ブランチをテスト環境にデプロイする

テスターは、テスト環境の開発ブランチの最新コードを取得し、テスト環境をデプロイします。

5.6 開発ブランチをメインブランチにマージする

テスト環境が検証されたら、開発ブランチをトランク トランク ブランチにマージします。

5.7 仕上げ作業

リモート リポジトリ上の開発ブランチを削除します。

6. まとめ

この記事では、プロジェクトの開発およびテスト プロセスを最適化するために SVN を使用するだけであり、SVN で関連する操作を実行する方法についてのみ説明します。SVN の基本原理や SVN のその他の機能については説明しません。興味のある学生は、公式 Web サイトにアクセスしてご覧ください。 、または、私が更新するのを待ってください~

参考文献:

subversion.apache.org/docs/

svnbook.red-bean.com/

www.php.cn/tool/git/48…

  • 終わり -

おすすめ

転載: juejin.im/post/7264043620842471483