您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

基于windows平台的SVN教程

时间:2019-10-28 10:46:21  来源:  作者:
作者:东风化宇 
来源:http://www.flyne.org/article/851
基于windows平台的SVN教程

 

一、SVN工作原理

SVN(SubVersion)的基本工作思路是这样的:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序,由源代码库管理员统一管理这些源程序。

每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地(Checkout),然后用户可以在本地任意修改,最后用svn命令进行提交(Commit),由svn源代码库统一管理修改。如下图:

基于windows平台的SVN教程

 

  • SVN服务器:运行SubVersion服务的计算机,SubVersion支持linuxwindows,更多的是安装在Linux下。SVN提供服务有两种方式(运行方式):独立服务器和借助Apache服务器,分别使用SVN协议和Http协议。
  • SVN客户端:用户通过SVN客户端同SVN服务器打交道,SVN客户端分为命令行工具和图形化工具。最流行的客户端是TortoiseSVN。也可以在Eclipse中使用SVN插件。
基于windows平台的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:svnreporepoDemo1。后面就使用该目录作为SVN仓库。

2)创建仓库:svnadmin create E:svnreporepoDemo1。创建仓库后的目录结构如下:

基于windows平台的SVN教程

 

3)启动SVN服务:svnserve -d -r E:svnreporepoDemo1,如下图:

基于windows平台的SVN教程

 

这样就启动了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平台的SVN教程

 

删除该windows服务:sc delete svnService。

2、SVN客户端操作(命令行)

重点:checkout(检出)、commit(提交)、update(更新)

1)在E盘下建立user1、user2两个目录,模拟两个协同工作的用户的workspace。

2)检出:第一次和SVN服务器交互时,需要使用checkout将仓库检出到本地。

基于windows平台的SVN教程

 

说明:检出一次,就建立了与SVN仓库的连接。

3)提交:commit

在user1目录下新建Demo1.JAVA文件,将该文件提交到SVN仓库。下图演示了三种典型的错误提交。

基于windows平台的SVN教程

 

4)更新:update

切换到user2的工作空间(user2目录下),user2第一次使用SVN仓库,需要检出。user2修改Demo1.java后提交。切换到user1目录,更新(update)。

基于windows平台的SVN教程

 

5)删除与恢复:delete、revert

基于windows平台的SVN教程

 

说明:如果delete后,提交到服务器(commit),则服务器上的数据也被删除了(慎用)。

三、SVN的目录约定

  • /trunck:开发主线
  • /branches:支线副本
  • /tags:标签副本(一旦创建,不允许修改)

1)使用trunk作为主要的开发目录

一般的,我们的所有的开发都是基于trunk进行开发,当一个版本(release)开发告一段落(开发、测试、文档、制作安装程序、打包等结束后),代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。

当下一个版本/阶段的开发任务开始时,继续在trunk进行开发。此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。解决方法是基于发行版对应的tag,做相应的分支(branch)进行开发。

2)下图为struts2的SVN仓库目录:

基于windows平台的SVN教程

 

现在Struts2的代码使用git管理,所以现在查看Struts2的SVN仓库是空的。

四、TortoiseSVN的使用

TortoiseSVN是现在最流行的SVN客户端工具,使用图形化界面和SVN仓库交互(作为命令行方式的替代)。关于TortoiseSVN的安装省略。

安装完成后,在任意位置右击都能看到TortoiseSVN选项。

1、基本操作

1)创建仓库

创建目录:E:svnreporepoDemo2,进入该目录下,右击 — TortoiseSVN — Create repository here,并创建默认的SVN目录结构,如下图所示:

基于windows平台的SVN教程

 

2)检出:checkout

在E盘下建立user3、user4两个目录,模拟两个协同工作的用户的workspace。

进入user3目录下,右击 — SVN Checkout,在URL of repository中输入:file:///E:/svnrepo/repoDemo2。【此时仓库还没有启动SVN服务,所以使用file://】

基于windows平台的SVN教程

 

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仓库中的内容,如下。

基于windows平台的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需要更新,更新时就会发生冲突。如下图:

基于windows平台的SVN教程

 

对于每个更新冲突的文件,Subversion会在冲突文件所在目录下放置了三个文件:

  • Demo1.java.mine:发生冲突时的本地版本。
  • Demo1.java.r3:最后更新之后的本地版本。
  • Demo1.java.r4:仓库中的最新版本。

解决方法 1:

① 在Demo1.java上右击 — TortoiseSVN — Edit conflicts,这时你需要确定哪些代码是需要的,做一些必要的修改然后保存。小技巧:编辑冲突时,可使用直接复制需要的代码到Merged窗口即可。

② 编辑完成后保存,直接选择Mark as resolved,即标记为冲突已解决。退出编辑冲突窗口,发现冲突发生时生成的三个文件被自动删除了,且Demo1.java变成了未提交状态。

基于windows平台的SVN教程

 

③ commit,OK。

解决方法 2:

直接修改Demo1.java,把其中的一些标记删除即可(前提是服务器上的和本地的内容都需要保存)。

4、TortoiseSVN图标

基于windows平台的SVN教程

 

部分图标的说明:

  • normal:状态正常
  • modified:对本地的副本做了修改,需要提交到服务器
  • conflicted:有冲突
  • readonly:文件是只读的,要修改必须先获取锁
  • locked:获得锁
  • deleted:计划从版本库中删除
  • added:已被计划纳入版本控制
  • non-versioned:未纳入版本控制

5、认证与授权

所谓认证(Authentication),就是给使用该仓库的用户分配一个用户名和密码,用户在连接仓库的时候需要输入用户名/密码。授权(Authorization)就是为指定用户分配特定的权限,如只读、读写等。认证与授权的设置需要修改仓库conf目录下的文件,如下:

  • authz:认证文件,分配用户名、密码。
  • passwd:授权文件,为现有用户分配组,并为组分配权限。
  • svnserve.conf:指定认证、授权文件的位置。

1)修改conf/svnserve.conf

基于windows平台的SVN教程

 

2)修改conf/passwd

基于windows平台的SVN教程

 

3)修改conf/authz

基于windows平台的SVN教程

 

这样,当用户再次执行checkout、commit、update时,就会要求认证。

五、subclipse插件的使用

Eclipse提供了集成SVN的插件 — subclipse,本文重点关注subclipse的使用。Eclipse中插件的安装不是这儿的重点。安装成功后,可以看到下面的视图(Windows — Show View)和透视图(Windows — Open Perspective):

基于windows平台的SVN教程

 

下面的操作使用了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上右键 — 检出为。

基于windows平台的SVN教程

 

在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.2confhttpd.conf释放掉注释和增加红色边框的两行(有顺序要求)

基于windows平台的SVN教程

 

3)从SVN安装目录的bin目录下,拷贝mod_authz_svn.so和mod_dav_svn.so到C:Apache2.2modules目录中

4)用Apache服务器的htpasswd创建密码文件

基于windows平台的SVN教程

 

5)拷贝project1_password到E:repositorysvnproject1conf目录下

6)拷贝以下内容到Apacheconfhttpd.conf最后

基于windows平台的SVN教程

 

7)访问http://localhost/svn/flyne/trunk即可访问SVN仓库。



Tags:SVN   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
安装找到64位的包 一路nextfinish安装完成之后,右键就会出现 SVN CHeckout表示svn检出,点击它 URL of repository表示的是库的路径,这个我们可以下面这种方式来获得 Ch...【详细内容】
2020-07-23  Tags: SVN  点击:(102)  评论:(0)  加入收藏
现在一般开发都是协同开发了,所以会用到版本控制系统,说白了就是大家一起开发一个项目,分别写不同的代码,然后需要把代码汇总到一起,大家可能互相需要对方写的代码,就是大家共同去...【详细内容】
2020-05-29  Tags: SVN  点击:(48)  评论:(0)  加入收藏
◆◆SVN服务器的安装◆◆1)下载VisualSVN Server,官网:https://www.visualsvn.com/server/download,根据要选择32位和64为位。(V3.3.1版本支持操作系统环境:WindowsVista 、Windo...【详细内容】
2020-03-19  Tags: SVN  点击:(52)  评论:(0)  加入收藏
对于所有版本控制系统,项目文件都位于远程服务器上,当您在本地计算机上完成工作时,可以将文件推送到远程服务器上。但是,决定使用集中版本控制系统(如SVN)还是分布式版本控制系统(...【详细内容】
2019-12-04  Tags: SVN  点击:(111)  评论:(0)  加入收藏
subversion可以结合apache httpd提供服务,这样子就可以通过http提供服务。 安装yum -y install subversion httpd mod_dav_svn 配置文件安装完以后,可以在/etc/httpd/conf.mod...【详细内容】
2019-11-22  Tags: SVN  点击:(185)  评论:(0)  加入收藏
导出原SVN版本库dunp方式可分为全量导出和增量导出全量导出:压缩备份:[root@aliyun home] svnadmin dump /home/svn/repos1 | gzip > ./repos1.gz不压缩备份:[root@aliyun home...【详细内容】
2019-11-20  Tags: SVN  点击:(83)  评论:(0)  加入收藏
SVN(SubVersion)的基本工作思路是这样的:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序,由源代码库管理员统一管理这些源程序。...【详细内容】
2019-10-28  Tags: SVN  点击:(107)  评论:(0)  加入收藏
在Linux服务上修改代码很麻烦,使用个版本工具会节省开发工具,有人说为啥不用Git而是选择SVN。因为平时写项目也就两三个人,代码量也比较小,本人比较懒,学东西也比较慢,对于Git的了...【详细内容】
2019-10-14  Tags: SVN  点击:(130)  评论:(0)  加入收藏
1、查看是否安装SVNsvn --versionCentOS下SVN服务的启动与关闭2、启动SVN服务:svnserve -d -r /home/svn/home/svn 为版本库的根目录;3、关闭SVN服务:killallsvnserve #关闭svn...【详细内容】
2019-09-29  Tags: SVN  点击:(158)  评论:(0)  加入收藏
作者:yoodb来源:https://blog.yoodb.com/yoodb/article/detail/1518 svnadmin是一个Java开发的管理svn服务器的项目用户的web应用。安装好svn服务器端把svnadmin.war部署至tom...【详细内容】
2019-08-16  Tags: SVN  点击:(194)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条