集中式版本控制工具 —— SVN
一、简介
1️⃣ SVN 是什么?
- 代码版本管理工具
- 他能记住每次的修改
- 查看所有的修改记录
- 恢复到任何历史版本
- 恢复已经删除的文件
2️⃣ SVN 与 Git 相比有什么优势?
- 使用简单、上手快
- 目录级权限控制,企业安全必备
- 子目录 Checkout,减少不必要的文件检出
3️⃣ 主要应用在哪些情况?
- 开发人员用来做代码的版本管理
- 用来存储一些重要的文件,比如合同
- 公司内部文件共享,并能按目录划分权限
4️⃣ 工具推荐
- SVN 仓库、客户端推荐svnbucket SVN桶
- 去官网注册 SVN桶 账号
- 下载 SVN 客户端,此处推荐 TortoiseSVN
二、基本操作
1️⃣ 检出 checkout
- 在SVN桶官网创建一个项目

- 复制我们的项目地址,来到我们本地文件夹中,鼠标右键选择检出

- 输入我们 SVN桶 的账户用户名和密码,检出完成后会显示我们的仓库目录

2️⃣ 新增 add
- 在我们本地仓库里创建一个文件 a.txt

3️⃣ 提交 commit
- 在仓库中鼠标右键,SVN Commit 会弹出提交页面

- 此时在网站中已经可以看到我们提交的内容了

4️⃣ 更新 update
-
右键仓库空白区域,可以通过 SVN Update 更新我们本地仓库
-
修改 a.txt 文件,加入一行内容,然后提交,再提交前我们可以查看提交前后的文件差异

-
然后确定提交
5️⃣ 查看历史记录
- 右键空白区域,
Tortoise -> Show log可以查看日志

- 使用SVN在每次提交之前先更新一下,这是一个很好的习惯,可以减少冲突
三、撤销恢复
1️⃣ 撤销本地修改
- 先修改我们的 a.txt

- 右键我们的文件 -> 点击 Tortoise -> Revert 【还原】


2️⃣ 撤销已经提交的内容
- 编辑 a.txt 文件,然后提交

- 右键仓库空白区域 -> Tortoise -> Show log -> 点击我们错误提交的那条日志 -> revert change this version 【复原此版本做出的修改】

- 此时我们的 a.txt 文件从之前错误版本恢复到了正常版本,处于修改状态,需要我们提交一下


3️⃣ 恢复到指定的版本
- 我们添加新内容、提交,多重复几次,然后恢复到添加新内容之前的版本

- 我们可以 右键空白区域 -> Tortoise -> Show log -> 选择我们要复原到的那个版本的记录 -> Revert to this version 【复原到此版本】

- 可以看到 a.txt 已经恢复到了我们指定版本的内容,接下来只需要我们提交一下就好了

四、添加忽略
-
当有些文件我们并不想提交到我们的仓库中,我们可以添加忽略
- 创建一个文件b,然后提交到我们的仓库中
- 忽略一个文件的步骤:

-
忽略后的文件上会有一个 x

-
我们提交一下就会删除我们仓库里已经保存的但我们设置为忽略的数据,完成操作后文件不再拥有SVN的状态

-
当我们想取消忽略,我们可以采用添加或从忽略列表删除来实现

五、解决冲突
1️⃣ 什么情况下容易发生冲突?
-
多个人修改了同个文件的同一行

-
无法进行合并的二进制文件 【以修改图片为例】

2️⃣ 怎么避免冲突?
- 经常 update 同步下他人的代码
- 二进制文件不要多个人同时操作
3️⃣ 冲突了怎么办?
- 右键选择冲突解决方式:
- 使用自己的版本、使用对方的版本、手动编辑冲突文件

- 哪边正确就右键选择使用此文本块

- 使用自己的版本、使用对方的版本、手动编辑冲突文件
- 对于二进制的冲突文件,我们需要手动进行选择

六、分支
-
什么时候需要分支?
- 隔离线上版本和开发版本
- 大功能开发,不想影响到其他人,自己独立开个分支去开发
-
SVN经典目录结构:
- trunk: 主干 用于存放一些开发中的文件,开发完成后我们就可以生成一个版本,然后存储到 branches分支中去
- branches:SVN的branches目录是用来保存分支的目录,分支是代码库中的一个独立副本,它可以与主开发线分离并独立发展
- tags:SVN的tag目录是用来保存代码库的某个特定版本的快照副本的目录,通常用于标记代码库中的重要事件或里程碑
1️⃣ 在我们的仓库下创建三个目录 trunk、branches、tag,然后将当前的文件都存储到 trunk 中

2️⃣ 当我们完成了本地开发,想要发布一个线上版本,可以将trunk中的文件生成一个版本存储到 branches 中

输入我们的分支保存地址

我们可以看到 online1.0 已经保存到了我们的 branches 中

3️⃣ 但是随着分支的增加,以后可能要更新的内容也越来越多,所以我们可以把这个分支单独的 checkout(检出)出来
复制SVN的地址

修改文件名并检出到指定目录

检出后的目录结构

4️⃣ 同理我们也把 trunk 也 checkout 出来,然后把包含所有的那个删除,只保留我们线上版本和主线版本
-
我们在主干和分支中修改代码等操作,相互是不影响的
-
如果我们线上版本修改了,我们可以通过分支合并的方式,将线上版本合并到主干上,完成对主干的修改

合并完成之后,我们到主干目录 commit 一次就好了
5️⃣ 我们根据 trunk 分支再创建一个 online2.0 分支出来,我们无需再通过 checkout 获取文件,可以右键 online1.0 进行分支切换

点击 Switch 之后,选择我们想切换到的分支

七、代码暂存
- 代码暂存有什么用?
- 代码改了很多,突然需要修复一个紧急 bug,但是代码还没有写完,不能提交
- 代码重构了很多,突然需要发布新版本,但是代码还跑不起来,不能提交

八、复杂代码合并
-
一般什么情况下才算复杂代码?
- 主干开发新功能,改了很多代码
- 分支是线上版本,修复了很多 bug
- 也就是说两个分支的代码时间久了差异很大,无法直接和并或者指定提交记录合并代码
-
一般我们都会借助 BeyondCompare 工具来完成复杂代码合并工作

-
右键左右两个目录对比后,会将所有存在差异的文件列出来


相关文章:
集中式版本控制工具 —— SVN
一、简介 1️⃣ SVN 是什么? 代码版本管理工具他能记住每次的修改查看所有的修改记录恢复到任何历史版本恢复已经删除的文件 2️⃣ SVN 与 Git 相比有什么优势? 使用简单、上手快目录级权限控制,企业安全必备子目录 Checkout,…...
【Dom获取属性操作】JavaScript 全栈体系(十)
Web APIs 第四章 操作元素属性 一、操作元素常用属性 还可以通过 JS 设置/修改标签元素属性,比如通过 src更换 图片最常见的属性比如: href、title、src 等语法: 对象.属性 值 <!DOCTYPE html> <html lang"en">&…...
C# 中的多态和虚方法,如何实现多态和使用虚方法?
在 C# 中,多态(Polymorphism)是面向对象编程的基本特性之一,它允许使用不同的对象和方法来执行同一操作。C# 中实现多态的方式主要是通过虚方法和抽象类。 虚方法是一种允许子类覆盖的方法,它的实现是在运行时动态确定…...
R软件使用一些常见的问题
以下均是个人经验摸索的解决办法,使用 Rstudio 执行命令,如有高手能更好地解决问题,还望指教,提前感谢。 问题一: 有些 package 因为编辑得比较早又没有继续更新,所以需要用旧版本的 R 才能正常运行&#…...
为什么需要uboot?
一、先看概念 bootROM:一种固化在芯片内部的只读存储器(ROM),用于启动和初始化系统。BootROM 中通常包含了一些预先编写好的代码,用于完成系统启动前的基本初始化和配置,例如初始化时钟、GPIO控制器、中断…...
Qt布局实战:实现高效、美观的GUI应用程序
Qt布局实战:实现高效、美观的GUI应用程序 引言 (Introduction)1.1 Qt布局简介 (Brief introduction to Qt layouts)1.2 Qt布局的优势 (Advantages of Qt layouts) 2.布局类型 (Layout Types)2.1 水平布局 (QHBoxLayout)2.1.1 创建水平布局2.1.2 向水平布局中添加部件…...
推荐几款项目管理工具,提高你的团队协作效率
如何管理团队才能使团队发挥最大的价值,如果团队缺少协作,就会因为团队的内耗和冲突导致项目无法完成,如何提高团队协作效率呢?我们可以借助团队协作类的项目管理工具。 几个常见的项目管理工具: 1、进度猫 进度猫是…...
SQL101 检索每个顾客的名称和所有的订单号(一)
描述 Customers表代表顾客信息含有顾客id cust_id和 顾客名称 cust_name cust_idcust_namecust10andycust1bencust2tonycust22tomcust221ancust2217hex Orders表代表订单信息含有订单号order_num和顾客id cust_id order_numcust_ida1cust10a2cust1a3cust2a4cust22a5cust221…...
mac压缩文件多了__MACOSX目录问题
文章目录 背景原因解决方案:更换压缩方式分析问题拓展(.DS_Store) 背景 项目中有一个场景,需要把目录压缩为app离线包的zip 但是压缩之后一致打不开,别人上传的zip是好的 原因 如图,我上传的在安卓设备…...
1.17 从0开始学习Unity游戏开发--场景切换
前面的所有文章我们都在一个固定的游戏场景内进行开发,在最开始介绍场景这个概念的时候就已经提及,这个场景可以是一张地图,或者是一个对战房间等等,所以显然这个场景可以有多个,并且可以从一个场景切换到另外一个场景…...
【golang学习笔记】——(五)Go格式化统一代码风格
我们在入职一家新公司的时候,除了要学习公司的流程规范和规章制度,还会做的一件事情就是进行公司编码规范的学习,基于google的C规范下,做了各自的发散和规范,久而久之就是包罗万象的样子,疲于应付各种规范约…...
CAD转SHP最好的方法 赶快收藏起来吧
1、利用 ArcToolsbox 工具先将 DWG 文件转为 MDB 通过 CASS 软件生成的 DWG 文件,字段中包含有很多属性内容,所以我们先将 DWG 格式 的文件转换为 MDB 格式,再通过 MDB 转换为 SHP 格式数据进行整理。具体步骤如下: 通过 ArcTool…...
PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor
前言: 本文主要介绍了如何使用Python VTK高亮显示actor,使用Python语言,高亮显示选中的actor。当窗口中的圆球actor被选中时,会变成红色,并且会显示actor三遍面片边缘信息。 效果: VTK VTK,&…...
TCP和UDP通信对比
tcp通信流程 服务器: 创建流式套接字 绑定 监听 提取 读写 关闭 客户端: 创建流式套接字 连接 读写 关闭 收发数据: read recv ssize_t recv(int sockfd, void *buf, size_t len, int flags); //flagsMSG_PEEK 读数据不会删除缓冲区的数据 write send ssize_t send(int…...
SpringCloud:ElasticSearch之自动补全
当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图: 这种根据用户输入的字母,提示完整词条的功能,就是自动补全了。 因为需要根据拼音字母来推断,因此要用到拼音分词功能。 1.拼音分词器…...
TOOM解析如何搭建一套适合自己的舆情监测系统?完整的实战指南
随着互联网的普及和社交媒体的盛行,人们在网络上的活动越来越多,同时也涌现出大量的信息和舆情。这些信息和舆情在一定程度上会影响社会和个人的发展和进步。因此,舆情监测逐渐成为一项重要的任务。在本篇文章中,我们将为大家介绍…...
技术分享 | OceanBase 手滑误删了数据文件怎么办
作者:张乾 外星人2号,现兼任六位喵星人的资深铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 手滑误删了数据文件,并且没有可替换的节点时&…...
windows上Git Bash支持常用命令gcc tree zip wget cmake ninja
windows上Git Bash支持常用命令gcc tree zip wget cmake ninja 前言 Git Bash基于MinGW64, 提供了win32下的linux命令环境,如ls、cat、tar等。 但是Git Bash还是缺少一些命令,如gcc、make、tree、zip、wget、cmake、ninja等 1. Git Bash支持其他命令…...
面试题30天打卡-day10
1、String 和 StringBuffer、StringBuilder 的区别是什么? String、StringBuffer、StringBuilder主要的区别在于执行效率和线程安全上。 String:String字符串常量,意味着它是不可变的,导致每次对String都会生成新的String对象&a…...
【python】制作一个简单的界面,有手就行的界面~
目录 前言准备工作试手小案例开始我们今天的案例教学尾语 💝 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! ttkbootstrap 是一个基于 tkinter 的界面美化库, 使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序。 ttkbootstrap …...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
