网站首页 > 技术文章 正文
什么是SVN(Subversion)?
SVN是版本管理工具,譬如团队进行项目开发,项目代码都储存在服务器上,成员可用SVN在本地获得并更新代码
有一个简单但不十分精确比喻:
SVN = 版本控制 + 备份服务器
简单的说,您可以把SVN当成您的备份服务器,更好的是,他可以帮您记住每次上传到这个服务器的档案内容。并且自动的赋予每次的变更一个版本。
通常,我们称用来存放上传档案的地方就做Repository。用中文来说,有点像是档案仓库的意思。不过,通常我们还是使用Repository这个名词。基本上,第一次我们需要有一个新增(add)档案的动作,将想要备份的档案放到Repository上面。
日后,当您有任何修改时,都可以上传到Repository上面,上传已经存在且修改过的档案就叫做commit,也就是提交修改给SVN server的意思。针对每次的commit,SVN server都会赋予他一个新的版本。同时,也会把每次上传的时间记录下来。
日后,因为某些因素,如果您需要从Repository下载曾经提交的档案。您可以直接选择取得最新的版本,也可以取得任何一个之前的版本。如果忘记了版本,还是可以靠记忆尝试取得某个日期的版本。
为什么要用SVN?
1.备份工作档案的重要性
您永远不知道计算机上的硬盘何时会坏掉。根据经验法则再加上墨菲定理,坏事情往往都发生在最重要的时刻。例如,要release东西的前一刻,硬盘完全坏掉,无法修复。所以,常常备份工作数据是非常重要的。大部分公司的server都会有专门的备份机制,甚至是异地备援。绝对比放在自己的计算机里头,或是随身碟上面来的安全。
2.版本控管的重要重要性
您无法保证手头上最新版本永远都是对的。很多时候,在经过数天努力工作后,您才发现走错方向。需要将所有的修改回复到数天前版本。没有几个人能够完全记住自己修改过什么东西。如果没有做好版本控管,那么,最差的状况就是要全部重来。
3.伙伴间的数据同步的重要性
很多时候,除了您个人外,还有其它的伙伴也需要您的档案。怎么把最新的档案提供给伙伴呢?用e-mail?根据经验,用e-mail是一个很差的办法。到了最后,根本就不知道哪一封e-mail才是新的。因为可能您最新的e-mail已经被当成垃圾信给丢了。别忘了,现在很多e-mail软件都有anti-spam(反垃圾邮件)的功能,说不定这些信件都被当成广告信给处理掉了。而且,您也应该知道一般档案如果放在e-mail内,档案大小会变得比较大(通常是原来的4/3倍以上)。如果每天更新一次,恐怕几天没收信的话,信箱就爆了!
4.如果没有一个好的办法,备份不同版本是很耗费硬盘空间的
例如:您有一个总共10 MB的目录,使用单纯的档案备份。如果有10个版本就会变成100 MB。20个版本就有200 MB。如果,不想备份这么多版本,势必就是要减少备份的次数。拉长备份周期将会导致数据遗失的危险性增高。把旧的不需要的备份删除?根据经验,只要时间一拉长,您根本就不知道一个月以前的版本是重要或者是不重要。
SVN能帮我们解决上面的问题吗?
SVN Repository可以是自己计算机上的一个目录,或者是随身碟(不建议这样用)。当然也可以是公司的服务器。
SVN有很棒的版本控管机制。所有上传的版本都会帮您记录下来。日后您可以随时取得某一个时刻的版本。而且,也有版本分支及合并等好用的功能。
SVN可以让不同的开发者存取同样的档案,并且利用SVN Server作为档案同步的机制。也就是说,您有档案更新时,无须将档案寄给您的开发成员。只需要告诉他新的版本已经在SVN Server上面,请他自己去SVN Server上面就可以取得最新版本。而且,SVN Server也可以做到当您上传新版本后,自动发信给相关的成员。
SVN的存放档案方式是采用差异备份的方式。也就是说,他只会备份有不同的地方。所以很省硬盘空间。此外,他也可以针对所谓的非文字文件进行差异备份
SVN基本功能
检出(Checkout):
从版本库取出一个新版本。
提交(Commit):
将对工作副本的修改发送给版本库。
更新(Update):
下载最新版本库文件的记录。
锁定-修改-解锁:
1. 一定时间段版本库的一个文件只允许一个人修改,直至解锁。
2. 锁定(Get lock),解锁(Release lock)
还原(Revert):
取消最近一次的操作(只针对客户端,服务端不做改动)。
更新到特定版本(Update to revision):
本地文件副本,更新为服务器上的指定版本。
重命名(Rename):
对已经纳入SVN管理的文件进行重命名。
添加(Add):
把文件添加到SVN,即将文件纳入SVN管理。
删除(Delete):
对已近纳入SVN管理的文件进行删除。
清理(Clean up):
SVN更新时,由于一些操作中断更新(磁盘空间不够等),可能会造成本地文件被锁定的情况,
解决方法:
1. 使用clean up来清除锁定。
2. 若不是本目录,往上层目录寻找直至根目录。
3. 有时,根目录都无法clean up,则另选目录重新Check out。
4. 如果觉得第3种很麻烦,可以考虑这样的方法。
其实SVN加锁会在.SVN隐藏文件)中生成一个名字叫lock的文件(无后缀),查找所有的,手工删除。
然后再尝试更新,系统可能会提示某个.base文件无法访问。
找到它,把相关的文件或其所在的目录删除,重新更新,工作量就小多了。
分支/基线(Branch/Tag):
SVN的项目目录下,有3个子目录:trunk, branch, tag
1. trunk: trunk目录是主目录,即工作目录。绝大部分提交、更新操作都发生在这个目录。
2. branch: branch目录是分支目录,存放当前开发版本的分支版本。
3. tag: tag目录是基线目录,存放已经发布的版本或者重要的基线目录。这个目录为只读。
如果有bug需要修改,则需要创建基线目录的分支目录来修改。
重定位(Relocate):
有时服务器的地址改变了,利用relocate来重新定位服务器的地址。
SVN的版本号是如何迭代的?
4个规则:
1. 版本号从1开始迭代,每次提交使版本号增1.
2. 每个受版本控制的文件有自己的版本历史,其第一个版本号为加入时版本库的版本号。
3. 版本库的版本号 = 目前所有受版本控制的文件版本号的最大值。
4. 版本库的版本号是连续的,文件版本号非连续。
Checkout和Export的差异?
Checkout出的内容受版本控制,Export出的内容不受版本控制。
猜你喜欢
- 2024-10-05 SVN客户端用户使用手册(svn使用流程)
- 2024-10-05 Coding的SVN服务踩坑记(coding guideline)
- 2024-10-05 Linux SVN 命令详解(svn for linux)
- 2024-10-05 SVN用户操作教程指南 | 看完这篇变成骨灰级专家
- 2024-10-05 centos7下svn的安装与配置(svn安装命令行)
- 2024-10-05 git svn用git提交到远端svn仓库,包含只拥有某个分支权限的情况
- 2024-10-05 软件开发公司必备工具之版本控制工具
- 2024-10-05 To B 产品设计,警惕这些陷阱!(to b和to c产品的区别 to g)
- 2024-10-05 「干货」svn服务器备份、还原、迁移一条龙教程
- 2024-10-05 记一次jenkins构建报错解决办法:「FATAL」 Non-readable settings
- 08-01Linux Systemd入门
- 08-01使用 Checkmk 监控 Oracle 服务器
- 08-01核心库CPU飙到99%了!我发现很多DBA都不会看日志……
- 08-01China's CETC Kingbase Unveils AI-Powered Database Appliances Amid Rising Demand for Intelligent Data Infrastructure
- 08-01Docker安装部署Oracle/Sql Server
- 08-01Oracle数据库安装 | 步骤详细
- 08-01基于Springboot + vue实现的社团管理系统
- 08-01前端开发如何用Mock.js进行数据接口模拟
- 1520℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 623℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 526℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 491℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 460℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
-
- Linux Systemd入门
- 使用 Checkmk 监控 Oracle 服务器
- 核心库CPU飙到99%了!我发现很多DBA都不会看日志……
- China's CETC Kingbase Unveils AI-Powered Database Appliances Amid Rising Demand for Intelligent Data Infrastructure
- Docker安装部署Oracle/Sql Server
- Oracle数据库安装 | 步骤详细
- 基于Springboot + vue实现的社团管理系统
- 前端开发如何用Mock.js进行数据接口模拟
- 使用vite为vue项目配置@别名
- 基于Springboot + vue3实现的教务管理系统
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- js~~ (67)
- node_modules怎么生成 (87)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)