SVN版本控制器使用攻略

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SVN版本控制器🍅程序员小王的博客:程序员小王的博客🍅 欢迎点赞 👍 收藏 ⭐留言 📝🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕🍅java自学的学习路线:java自学的学习路线

一、前言

本周有点忙,几天没有更新CSDN了,入职了《联动优势电子商务有限公司》,然后这个星期主要改了一个小的需求,然后期间用到了svn版本控制器,我原来一直使用的都是git,虽然我之前说Git是目前世界上最先进的分布式版本控制系统(没有之一),集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。,集中式版本控制工具的缺点有:服务器单点故障,如果服务器坏了,那什么都没了,容错性差。但是吧,一切的真理都是工作中使用什么,很不幸运的是就职的公司使用的就是svn版本控制工具,但是幸运的是自己有可以学到一门技术——SVN版本控制工具了!


0.png


二、svn解决的问题

svn版本控制工具解决了备份,代码还原,协同修改,多版本项目文件管理,溯源问题代码的编写人和编写时间,权限控制等问题


三、版本控制简介

1、集中式版本控制

 

    版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,
所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把

自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。


2、SVN 的工作原理:

 采取客户端/服务器模式——在服务器的版本库中保存项目文件的各个版本,
所有参与协同开发的程序员在自己本地电脑上保存一个工作副本。
SVN 支持程序员将本地副本更新到服务器端的最新版本,
也支持将本地副本的最新改变更新到服务器端,而且后面的更新不会覆盖前面的更新,
而是作为一个新的版本被保存下来——SVN甚至支持将本地工作
副本恢复为服务器端保存的某一个历史版本

1.png


3、SVN基本操作

(1)检出(checkout)


到达新公司后,项目负责人会会给一个SVN配置库权限分配申请表将一个服务端创建好的项目分支整个下载到本地,这是达到公司的第一步到达公司之后


2.png


(2)更新(update)


如果有其他同事更改了代码,自己需要将文件更新为最新版本,一般都是每天上班时间或者修改公共文件之前执行一次


(3)提交(commit)


自己修改完需求后,将项目提交到服务器,通常每天下班前或每实现一个功能、完成一个模块时执行一次


四、SVN客户端Subversion 安装

1、安装服务器端程序

(1)服务器端程序版本


官方网站推荐使用的版本是 1.8.9,原话是:The best available version of Apache Subversionis: 1.8.9


我安装的是Setup-Subversion-1.8.9-1


(2)下载源码包


Apache 组织自己维护更新的只是 Subversion 的源码,各个版本的源码包的下载地


址是:Download Apache Subversion Sources


Subversion 源码是使用 C 语言开发的


(3)下载二进制安装包


服务器端程序的下载地址可以使用:Download Apache Subversion Sources


下载到的文件是:Setup-Subversion-1.8.9-1.msi


(4)双击运行 Setup-Subversion-1.8.9-1


下一步

3.png


不整合 Apache 服务器可以忽略此选项


4.png


修改路径(非中文空格)


点击安装


5.png


点击完成


6.png


(5)安装程序会自动配置 Path 环境变量


自己安装的环境位置:D:\develop\svn\SubVertsion\bin


所以 bin 目录下的可执行文件可以在任意目录下运行。


(6)验证是否安装成功


在命令行输入:svn --version


看到如下信息就表示服务器端程序安装成功


7.png


2、配置版本库

(1)为什么要配置版本库


Subversion 是将文件数据信息保存到版本库中进行管理的,为了满足用户的不同需求,Subversion 允许用户对版本库目录进行定制


(2)在一个非中文无空格目录下创建一个文件夹,作为版本库的根目录。


例如:D:\develop\svn\DevRepository\Subversion


(3)在版本库根目录下创建与具体项目对应的子目录


SVN 服务器能够同时管理多个项目,而不是为每一个项目搭建一个 SVN 服务器——这显然太浪费资源了


例如:


8.png


(4)创建版本库

image.png

举例: svnadmin create D:\develop\svn\DevRepository\Subversion\DBHelper


(5)版本库结构

image.png

10.png


3、启动服务器端程序

(1)SVN 服务器必须处于运行状态才能响应客户端请求,帮助我们管理项目文件。


所以我们必须将 SVN 服务器启动起来。启动 SVN 服务器有两种方法,


一个是命令行方式


一个是注册 Windows 服务


(2)命令行方式


svnserve


e -d(后台执行) -r(版本库根目录) 参数


举例:svnserve -d -r D:\develop\svn\DevRepository\Subversion

11.png

12.png


((3)验证服务是否启动

SVN 服务监听 3690 端口,打开一个新的 cmd 窗口,使用` netstat -an` 命令查看 3690

端口是否被监听


13.png


命令行方式的缺陷是:只要运行服务器端程序的命令行窗口一关闭,服务就停止了,很不方便,而且每次开机都需要手动启动


14.png


4、使用命令行模式访问 SVN 服务器

(1)检出checkout


①进入自己的工作目录:D:\develop\svn\DevWorkSpace\SVNSpace(自己创建)


②格式:svn checkout svn://SVN 服务器主机地址/具体仓库目录 保存检出内容的目录


举例:svn checkout svn://localhost/DbHelper MyDbHelper


15.png


版本是0


③运行 checkout 命令后进入 MyERP 目录,看到里面什么都没有。真的什么都没有


吗?不是的。检出命令会在这一目录下创建一个隐藏目录.svn,用来保存与服务


器交互的重要信息,其中包括从服务器端取回的最新版本信息、文件状态、更新


时间等。SVN 正是以此为依据判断当前目录中文件的状态。所以这个隐藏目录千


万不要删除或修改其中的内容——完全无视它的存在吧。如果服务器端保存的文


件可以视为一个“正本”,那么每个开发人员检出到本地目录的文件可以视为“副


本”,通常称为工作副本


(2)提交(commit)


①进入D:\develop\svn\DevWorkSpace\SVNSpace 目录


②创建一个文件 HelloSvn.txt


16.png


③执行 svn commit 命令,运行结果是


说明一个文件必须纳入版本控制才可以提交到服务器端


④执行 svn add 命令,将 HelloSVN.txt 纳入版本控制


17.png


⑤再次执行 svn commit 命令


svn: E205007: 无法使用外部编辑器获得日志信息;考虑设置环境变量 $SVN_EDITOR,或者
使用 --message (-m) 或 --file (-F) 选项

18.png


此时要求附加日志信息


⑥使用-m 参数附加日志信息


svn: E170001: 提交失败(细节如下):
svn: E170001: 认证失败

19.png


原因是没有权限


⑦暂时先开启匿名访问权限


[1]进入对应的版本库目录下的 conf 目录:D:\develop\svn\DevRepository\SubVersion\DbHelper\conf


[2]打开 svnserve.conf


20.png


[3]将第 19 行的# anon-access = read 改为 anon-access = write,也就是去掉“# ”,


将 read 改为 write。注意前面不要留空格,一定要顶格写。


21.png


[4]不需要重启 SVN 服务,甚至命令行窗口都不需要重新打开。


⑧重新执行提交命令说明提交成功了。


22.png


⑨其实 svn commit 命令最后可以不指定具体文件,此时表示提交当前工作副本中的所有修改。


(3)更新


①将服务器端文件检出到一个新的目录,模拟另外一个终端


23.png


②回到 MyDbHelper目录,对 HelloSVN.txt 文件修改后提交。

24.png


25.png


③进入 TestDbHelper 目录


27.png


④执行 svn update 命令

28.png



(4)检出(cheackout)和update的区别

image.png


5、工作副本中文件的几种状态

①没有修改,现行版本


本档案在工作目录中没有被修改,而且自当前版本之后,其他终端也没有任何改变文件的修改被提交到服务器,即当前工作副本的版本和服务器端最新版本是一致的。对它执行 svn commit 和 svn update 都不会发生任何事。


②本地修改, 现行版本


这个文件被修改过,但这个修改还没有提交到服务器,而且自当前版本之后,其他终端也没有任何该文件的修改被提交到服务器,所以当前工作副本的版本和服务器端最新版本仍然是一致的。由于有尚未送交回去的本地修改,所以对它的svn commit 会成功提交你的修改,而 svn update 则不会作任何事。


③没有修改,过时版本


这个文件没有修改,但是版本库中有其他终端提交的修改。此时当前工作副本的版本比服务器端的版本落后了,我们称之为“过时”。对当前文件的 svn commit 不会发生任何事,而svn update会让工作目录中的文件更新至最新版本。


④本地修改,过时版本


服务器端存在没有更新到本地的修改,导致当前版本过时。如果这个文件在本地有未提交的修改,则无法提交,对它执行 svn commit 会产生“out-of-date”错误。


此时应该先尝试更新本地文件。更新时 SVN 会尝试将服务器端的更新与本地文件进行合并,合并的结果有两种可能:


一个是服务器端和本地修改位于文件的不同位置,合并成功;


另一个是服务器端的修改正好和本地修改位于同一个位置,发生冲突。


五、使用 SVN 独立客户端:TortoiseSVN

1、TortoiseSVN简介

TortoiseSVN 是一个 Windows 下的版本控制系统 Apache™ Subversion®的客户端工具。


30.png


2、TortoiseSVN 重载图标的优良特性

①外壳集成


TortoiseSVN 无缝地整合进 Windows 的外壳(例如资源管理器)。


②重载图标


每个版本控制的文件和目录的状态使用小的重载图标表示,可以让你立刻看出工作副本的状态。


③图形用户界面


当你列出文件或文件夹的更改时,你可以点击任意版本查看提交注释。也可以看到更改过的文件列表 - 只要双击文件就可以查看更改内容。提交对话框列出了本次提交将要包括的条目,每一个条目有一个复选框,所以你可以选择包括哪些条目。未版本控制的文件也会被列出,以防你忘记添加新文件。


④Subversion 命令的简便访问


所有的 Subversion 命令存在于资源管理器的右键菜单,TortoiseSVN 在那里添加子菜单。


3、TortoiseSVN 的历史

2002 年,Tim Kemp 发现 Subversion 是一个非常好的版本管理系统,但是缺乏一个好的图形界面客户端程序。做一个与 Windows 外壳整合的 Subversion 客


户端程序的想法是受一个叫 TortoiseCVS 的 CVS 客户端程序所启发的。Tim 研究了 TortoiseCVS 的源码并以此为 TortoiseSVN 的基础。他开始运作这个项目,注册了域名 tortoisesvn.org 并且将源码放在了网上。就在同时, Stefan Küng 正在寻找一个好用的并且免费的版本控制系统。他


找到了 Subversion 和 TortoiseSVN 的源码。因为 TortoiseSVN 还不能使用,他加入了项目并开始编码。很快,他就重写了现有的大部分代码并开始添加命令和功能,到了某个时段,最初的代码已经都被改写了。由于 Subversion 变得越来越稳定,它吸引了越来越多用户,他们同时也开始使用 TortoiseSVN 作为 Subversion 的客户端程序。用户数量快速增长(并且每


天还在增长)。这时候,Lübbe Onken 提出帮助项目提供精美的图标和 TortoiseSVN的标志。现在他负责照看网站和管理多语言翻译。


4、TortoiseSVN 安装

(1)第一步:下载svn的客户端,通俗一点来说就是小乌龟啦!


官网下载地址:[https://tortoisesvn.net/downloads.html](https://tortoisesvn.net/downloads.html)


(2)第二步安装


下载之后直接安装就好了,但是要注意这里,选择安装所有的命令行客户端工具,默认是不安装的,如果不安装,svn中的bin目录下就会没有svn.exe,这个待会会用到,所以一点要注意哦。(都是坑啊)


31.png


svn安装成功


32.png


(3)在任意目录下点右键→TortoiseSVN→settings


33.png

34.png



5、TortoiseSVN的使用

(1)检出


①创建一个目录用来存放检出得到的文件,例如 :wanghengjie


②进入目录 wnaghengjie,点右键

35.png


36.png



检出成功


37.png


wanghengjie目录(可以看到检出得到的文件)


38.png


有时候图标上没有任何标识。可能你会想到通过重启电脑的方式解决这一问题——其实不用这么麻烦。文件图标是受外壳程序控制的,我们只需要重启外壳程序——explorer.exe 就可以了。打开任务管理器,选中 explorer.exe 进程,结束进程,然后新建进程 explorer.exe 就可以了


(2)TortoiseSVN 图标含义

39.png

40.png


(3)纳入版本控制


①新建文件 wanghengjie.txt


41.png


②在文件上点右键


42.png


点击ok


43.png


③添加后文件图标发生变化


加号告诉你有一个文件或目录已经被调度加入版本控制。


44.png


(4)提交


①使用 TortoiseSVN 可以提交具体某一个文件,或某一个目录下的所有改变。方法就是在想要提交的项目下点右键,然后 SVN Commit...,就可以看到如下界面


45.png


提交日志(日志内容如果不填,TortoiseSVN 会提交一个空字符串作为日志信息)


46.png


提交成功


47.png


没有纳入版本控制的文件默认是不在提交范围内的,直接在新创建的文件上点右键只能看到 add 操作的选项,如前所述。


48.png


但在新创建的文件所在目录点右键选择 SVN commit...,可以看到如下界面


49.png


将文件 abcd.txt 选中


50.png


同样可以提交文件,TortoiseSVN 会帮我们自动将 abcd.txt 纳入版本控制


(5)更新


在要更新的文件或目录上点右键→SVN Update


51.png


(6)回复历史版本


①查看历史版本内容


[1]首先需要把对应版本库的匿名访问权限设置为 none:anon-access = none


[2]在要查看历史版本的文件上点右键→TortoiseSVN→Show log

52.png


53.png


②在要回复历史版本的文件上点右键→Update to version

54.png

55.png


(7)解决冲突


一个人已经更新了文件,并且提交,然后自己也跟新了文件,但是没有拉取,提交提交,同时文件图标变成一个“黄色的!”


显示文件已经过时了!


56.png


放弃自己修改的内容,进行Revert操作,使其成为修改前的内容


57.png


跟新服务器最新版本


58.png


然后修改后再提交


6、卸载TortoiseSVN

再次打开TortoiseSVN安装包文件,选择“Next”进行下一步,点击Remove选项,选择“Next”进行下一步


59.png


选择“Remove”进行下一步


60.png


选择“Finish”完成卸载


61.png


六、Idea集成使用SVN

1、svn安装地址

62.png


2、idea配置

如果已经搭建好了svn服务的话,就要开始在idea中配置相关的配置了,如下图:


63.png


看红圈内的就是安装svn(小乌龟)bin目录下的svn.exe 然后点击apply和OK就可以了。


3、检出代码 ,跟着图走就好了

64.png


然后这里的url就是你svn中项目的地址,如图

65.png

66.png


补充:如何确定版本库地址?


67.png


然后选中url,点击Share


68.png


然后代码就检出到本地了


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
Java Maven Android开发
SVN集中式版本控制工具
SVN集中式版本控制工具
70 0
|
3月前
|
存储 开发工具 数据安全/隐私保护
Git 与 SVN:版本控制领域的双星对比
【8月更文挑战第27天】
155 6
|
数据可视化 前端开发 开发工具
前端基本开发工具的版本控制工具之SVN
SVN(Subversion)是一款开源的版本控制工具,它可以帮助团队协作开发,并且提供了诸如版本回退、分支管理等功能。下面就让我们来看看SVN的特点和优势。
232 0
|
SQL 运维 jenkins
测试思想-流程规范 SVN代码管理与版本控制
测试思想-流程规范 SVN代码管理与版本控制
156 0
删除svn版本控制bat文件
删除svn版本控制bat文件
80 0
|
项目管理 开发工具 git
angular最新教程-第二节使用git、svn和码云做版本控制
angular最新教程-第二节使用git、svn和码云做版本控制
198 0
angular最新教程-第二节使用git、svn和码云做版本控制
初识SVN-版本控制工具
初识SVN-版本控制工具
184 0
|
开发工具 git
【学习笔记】【SVN】【CVS】【Git】集中式版本控制系统 与 分布式版本控制系统的理解与认识
【学习笔记】【SVN】【CVS】【Git】集中式版本控制系统 与 分布式版本控制系统的理解与认识
335 0
|
数据安全/隐私保护 Android开发
版本控制工具之SVN
虽然现在很多用git,但是SVN也是之前一代的神
958 0
版本控制工具之SVN
|
Android开发
eclipse svn拷贝团队 队员文件 到项目导致svn失去版本控制等错误原因
最近做项目 有队员无法提交项目 直接拷贝到eclipse目录 发现 整个项目出现莫名其妙的错误
117 0