基于windows平台的SVN教程 windows安装svn客户端
yuyutoo 2024-10-13 09:12 3 浏览 0 评论
作者:东风化宇 来源:http://www.flyne.org/article/851
一、SVN工作原理
SVN(SubVersion)的基本工作思路是这样的:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序,由源代码库管理员统一管理这些源程序。
每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地(Checkout),然后用户可以在本地任意修改,最后用svn命令进行提交(Commit),由svn源代码库统一管理修改。如下图:
- SVN服务器:运行SubVersion服务的计算机,SubVersion支持Linux和Windows,更多的是安装在Linux下。SVN提供服务有两种方式(运行方式):独立服务器和借助Apache服务器,分别使用SVN协议和Http协议。
- SVN客户端:用户通过SVN客户端同SVN服务器打交道,SVN客户端分为命令行工具和图形化工具。最流行的客户端是TortoiseSVN。也可以在Eclipse中使用SVN插件。
二、SubVersion的使用
可以在http://subversion.apache.org/packages.html下载SVN并安装(本文使用windows版本,过程不多说)。在SVN中集成了服务器端和客户端组件:
- 服务器组件(管理员用):svnadmin、svnserve
- 客户端组件(程序员用):svn
这些组件命令都位于SubVersion安装目录下的bin目录下。
友情提示:安装完SVN后,通过”svnadmin –version”验证是否安装成功。如果出现错误“svnadmin不是内部或外部命令”,则需要手动将SVN的bin目录加入到path环境变量下。
1、创建SVN仓库
1)先创建一个目录:E:\svnrepo\repoDemo1。后面就使用该目录作为SVN仓库。
2)创建仓库:svnadmin create E:\svnrepo\repoDemo1。创建仓库后的目录结构如下:
3)启动SVN服务:svnserve -d -r E:\svnrepo\repoDemo1,如下图:
这样就启动了repoDemo1这个仓库的服务(单仓库),如果在svnrepo目录下还有其他仓库,且要同时启动多个仓库,执行svnserve -d -r E:\svnrepo即可(多仓库)。
一般情况下,访问SVN仓库的URL格式形如:svn://192.168.1.6/repoDemo1,但如果启动的是单仓库,则URL直接用:svn://192.168.1.6表示。svn协议的默认端口号为3690。
小技巧:如果需要频繁使用该仓库,则可将该SVN服务注册成windows服务,这样在计算机开机时就可以启动该服务。如下图:
删除该windows服务:sc delete svnService。
2、SVN客户端操作(命令行)
重点:checkout(检出)、commit(提交)、update(更新)
1)在E盘下建立user1、user2两个目录,模拟两个协同工作的用户的workspace。
2)检出:第一次和SVN服务器交互时,需要使用checkout将仓库检出到本地。
说明:检出一次,就建立了与SVN仓库的连接。
3)提交:commit
在user1目录下新建Demo1.java文件,将该文件提交到SVN仓库。下图演示了三种典型的错误提交。
4)更新:update
切换到user2的工作空间(user2目录下),user2第一次使用SVN仓库,需要检出。user2修改Demo1.java后提交。切换到user1目录,更新(update)。
5)删除与恢复:delete、revert
说明:如果delete后,提交到服务器(commit),则服务器上的数据也被删除了(慎用)。
三、SVN的目录约定
- /trunck:开发主线
- /branches:支线副本
- /tags:标签副本(一旦创建,不允许修改)
1)使用trunk作为主要的开发目录
一般的,我们的所有的开发都是基于trunk进行开发,当一个版本(release)开发告一段落(开发、测试、文档、制作安装程序、打包等结束后),代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。
当下一个版本/阶段的开发任务开始时,继续在trunk进行开发。此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。解决方法是基于发行版对应的tag,做相应的分支(branch)进行开发。
2)下图为struts2的SVN仓库目录:
现在Struts2的代码使用git管理,所以现在查看Struts2的SVN仓库是空的。
四、TortoiseSVN的使用
TortoiseSVN是现在最流行的SVN客户端工具,使用图形化界面和SVN仓库交互(作为命令行方式的替代)。关于TortoiseSVN的安装省略。
安装完成后,在任意位置右击都能看到TortoiseSVN选项。
1、基本操作
1)创建仓库
创建目录:E:\svnrepo\repoDemo2,进入该目录下,右击 — TortoiseSVN — Create repository here,并创建默认的SVN目录结构,如下图所示:
2)检出:checkout
在E盘下建立user3、user4两个目录,模拟两个协同工作的用户的workspace。
进入user3目录下,右击 — SVN Checkout,在URL of repository中输入:file:///E:/svnrepo/repoDemo2。【此时仓库还没有启动SVN服务,所以使用file://】
3)提交:commit
在user3/trunk目录下新建Demo1.java,在该文件上右击 — TortoiseSVN — add,则将Demo1.java纳入版本控制。然后右击 — SVN Commit,提交至代码仓库。
4)更新:update
对user4进行上面的检出操作。并修改user4目录下的Demo1.java(如增加一个字段),并commit。
回到user3/trunk,右击 — SVN Update。
5)启动SVN服务。这步需要在命令行中输入:svnserve -d -r E:\svnrepo
6)访问SVN仓库。在任意空白位置右击 — TortoiseSVN — Repo browser,URL输入:svn://192.168.1.6/repoDemo2即可浏览SVN仓库中的内容,如下。
2、其他操作
下面的操作都位于右键菜单的TortoiseSVN中。
1)删除:delete
删除文件或目录,不能直接用Windows的删除命令来操作,那样只是没有显示出来,实际并没有删除,在更新后,删除的文件又会被更新出来的。要想从库中删除,必须选中你要删除的内容,TortoiseSVN — delete,这样才会将这个文件标记成要删除的。确认需要删除后,使用前面所讲的提交命令,就会真正的在库中删除了。
2)重命名:rename
重命名也不能直接用Windows的重命名命令来操作,必须选中你要重命名的文件,TortoiseSVN — rename。修改后提交就可以更新到仓库。
改名的处理方式相当于新增了一个以新名称命名的文件,原名称命名的文件进行了删除。
3)还原:revert
在未提交之前,你对前面做的操作反悔了,可以使用revert来恢复。
4)检查更新:Check for modifications
① 此功能可以显示你所做的修改有哪些还没有提交的。② 还可以看到版本库里的改动,即别人提交了哪些文件的改动,你还没更新到本地。
5)导出:export
使用SVN的工作空间每个目录下面都有一个.svn隐藏目录,利用SVN的export命令可轻松地导出不含.svn目录的工作空间。
3、冲突问题的解决(☆)
何时发生:接着4.1节中的操作,假设user3和user4目录下的Demo1.java都更新到了最新版本。user3修改Demo1.java,提交至仓库。若user4也修改Demo1.java并提交,此时user4的TortoiseSVN会报提交版本过时的错误,并提醒user4需要更新,更新时就会发生冲突。如下图:
对于每个更新冲突的文件,Subversion会在冲突文件所在目录下放置了三个文件:
- Demo1.java.mine:发生冲突时的本地版本。
- Demo1.java.r3:最后更新之后的本地版本。
- Demo1.java.r4:仓库中的最新版本。
解决方法 1:
① 在Demo1.java上右击 — TortoiseSVN — Edit conflicts,这时你需要确定哪些代码是需要的,做一些必要的修改然后保存。小技巧:编辑冲突时,可使用直接复制需要的代码到Merged窗口即可。
② 编辑完成后保存,直接选择Mark as resolved,即标记为冲突已解决。退出编辑冲突窗口,发现冲突发生时生成的三个文件被自动删除了,且Demo1.java变成了未提交状态。
③ commit,OK。
解决方法 2:
直接修改Demo1.java,把其中的一些标记删除即可(前提是服务器上的和本地的内容都需要保存)。
4、TortoiseSVN图标
部分图标的说明:
- normal:状态正常
- modified:对本地的副本做了修改,需要提交到服务器
- conflicted:有冲突
- readonly:文件是只读的,要修改必须先获取锁
- locked:获得锁
- deleted:计划从版本库中删除
- added:已被计划纳入版本控制
- non-versioned:未纳入版本控制
5、认证与授权
所谓认证(Authentication),就是给使用该仓库的用户分配一个用户名和密码,用户在连接仓库的时候需要输入用户名/密码。授权(Authorization)就是为指定用户分配特定的权限,如只读、读写等。认证与授权的设置需要修改仓库conf目录下的文件,如下:
- authz:认证文件,分配用户名、密码。
- passwd:授权文件,为现有用户分配组,并为组分配权限。
- svnserve.conf:指定认证、授权文件的位置。
1)修改conf/svnserve.conf
2)修改conf/passwd
3)修改conf/authz
这样,当用户再次执行checkout、commit、update时,就会要求认证。
五、subclipse插件的使用
Eclipse提供了集成SVN的插件 — subclipse,本文重点关注subclipse的使用。Eclipse中插件的安装不是这儿的重点。安装成功后,可以看到下面的视图(Windows — Show View)和透视图(Windows — Open Perspective):
下面的操作使用了4.1节中的资源库(repoDemo2)。
1)关联资源库
进入SVN资源库研究透视图,在SVN资源库面板上右键 — 新建 — 资源库位置,URL中输入:svn://192.168.1.6/repoDemo2。
2)共享项目:share Project
新建一个Java Project,名称为svnProject,在项目中新建一个Demo1.java。
共享项目:在项目上右键 — Team — Share Project…,将项目导入到repoDemo2。在输入文件夹名时,一般选择使用项目名称作为文件夹名。
3)提交:Commit
共享之后,项目并没有提交到仓库中,此时在项目上右键 — Team — Commit,就可以将现在的项目提交到仓库中。
4)检出:Checkout
新建一个workspace,模拟另外一个用户(user2)。首先还是关联资源库,在svnProject上右键 — 检出为。
在Demo1.java中新增一个字段并提交(在user2的workspace中做的)。
5)更新:
切换到user1的工作空间,更新项目。不多说,Team — update
6)冲突处理
冲突的产生见4.3节。原则:提交之前先更新。
4.3节中的两种解决方法也适用于subclipse,解决方法1对应着subclipse中的Synchronize视图(View),解决方法2类同。
六、SVN与Apache整合(用到再看)
业务场景:在上面的Demo中,SVN仓库对外提供服务都是通过SVN协议,最直观的体现就是URL都是以svn://开头的。在开源项目中使用的SVN仓库对外提供服务时都是使用http协议,此时需要结合Apache服务器。
1)安装Apache服务器(假定安装在C:\Apache2.2)
2)修改C:\Apache2.2\conf\httpd.conf释放掉注释和增加红色边框的两行(有顺序要求)
3)从SVN安装目录的bin目录下,拷贝mod_authz_svn.so和mod_dav_svn.so到C:\Apache2.2\modules目录中
4)用Apache服务器的htpasswd创建密码文件
5)拷贝project1_password到E:\repository\svn\project1\conf目录下
6)拷贝以下内容到Apache\conf\httpd.conf最后
7)访问http://localhost/svn/flyne/trunk即可访问SVN仓库。
相关推荐
- jQuery VS AngularJS 你更钟爱哪个?
-
在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...
- Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0
-
在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...
- 如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例
-
要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...
- 编程技巧:Jquery实时验证,指定长度的「负小数」
-
为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...
- 一篇文章带你用jquery mobile设计颜色拾取器
-
【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...
- 编程技巧:Jquery实时验证,指定长度的「正小数」
-
为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...
- jquery.validate检查数组全部验证
-
问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...
- Vue进阶(幺叁肆):npm查看包版本信息
-
第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...
- layui中使用lay-verify进行条件校验
-
一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...
- jQuery是什么?如何使用? jquery是什么功能组件
-
jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...
- django框架的表单form的理解和用法-9
-
表单呈现...
- jquery对上传文件的检测判断 jquery实现文件上传
-
总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...
- Nodejs之MEAN栈开发(四)-- form验证及图片上传
-
这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...
- 大数据开发基础之JAVA jquery 大数据java实战
-
上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...
- 推荐四个开源的jQuery可视化表单设计器
-
jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)