admin 管理员组

文章数量: 1184232


2023年12月21日发(作者:under的英文单词)

SVN使用手册

目录

0 SVN简介.................................................................................................................... 1

1 SVN服务器篇............................................................................................................ 1

1.2 创建一个svn版本仓库名为svnrepos .......................................................... 1

1.2 设置登陆用户的用户名和密码..................................................................... 2

1.3 设置用户权限................................................................................................. 2

1.4 修改svn服务文件 ......................................................................................... 3

1.5 启动svn版本库 ............................................................................................. 3

2 SVN客户端篇............................................................................................................ 4

2.1 安装svn客户端 ............................................................................................. 4

2.1.1 svn的语言设置 .................................................................................... 5

2.2 下载版本库..................................................................................................... 6

2.3 推送版本库到服务器..................................................................................... 7

2.4 获取更新......................................................................................................... 9

2.5 版本还原......................................................................................................... 9

2.6 版本回退....................................................................................................... 12

3 SVN分支管理篇...................................................................................................... 13

3.1 svn分支简述 ................................................................................................. 13

3.2 svn分支管理 ................................................................................................. 14

3.2.1 建立主干分支目录结构.................................................................... 14

3.2.2 创建分支............................................................................................ 15

3.2.3 合并分支到主干................................................................................ 15

3.3 svn分支应用 ................................................................................................. 17

3.3.1 测试分支............................................................................................ 18

3.3.2 多分支并行........................................................................................ 18

3.3.3 分支合并的时机................................................................................ 18

4 版本冲突篇.............................................................................................................. 18

4.1 版本冲突原因............................................................................................... 18

4.2 版本冲突现象............................................................................................... 19

4.3 版本冲突解决............................................................................................... 19

4.4 解决冲突的三种选择................................................................................... 20

4.5 解决冲突....................................................................................................... 21

4.6 如何降低冲突解决的复杂度....................................................................... 22

附录.............................................................................................................................. 23

常见SVN图标的含义........................................................................................ 23

0 SVN简介

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

SVN是一个集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

1 SVN服务器篇

1.2 创建一个svn版本仓库名为svnrepos

在目录/var下创建一个名为svn的目录(已存在则不用创建),以后svn版本库的所有文件将储存在此目录,使用命令svnadmin create +目标位置,创建一个储存项目版本的仓库。

创建好版本仓库会自动生成一系列svn的配置文件,subversion目录说明:

1

db目录:就是所有版本控制的数据存放文件。

hooks目录:放置hook脚本文件的目录。

locks目录:用来放置subversion见艰苦锁定数据的目录,用来追踪存取文件库的客户端。

format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。

conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)。

1.2 设置登陆用户的用户名和密码

进入conf目录(该svn版本库配置文件)cd conf/

authz 文件是权限控制文件

passwd 是帐号密码文件

SVN服务配置文件

修改passwd文件

在最下方添加用户名与密码

注意:需要顶头写 前面不能有空格

用户名 = 密码

如此就成功添加了一位svn用户

1.3 设置用户权限

添加完用户,需要给予该用户相应的权限才能使其对版本库操作,进入authz文件,在文本最后添加两行

[/]

bslk=rw

/ 根目录

r(可读)w(可写),这里给予了最大权限

2

1.4 修改svn服务文件

当创建好用户并也设置好权限需要修改文件才能使之前的设置生效。

打开下面的几个注释:

anon-access = read #匿名用户可读

auth-access = write #授权用户可写

password-db = passwd #使用哪个文件作为账号文件

authz-db = authz #使用哪个文件作为权限文件

realm = /var/svn/svnrepos # 认证空间名,版本库所在目录

1.5 启动svn版本库

当svn的配置文件全部设置完毕就可以启动svn了,命令:

svnserve -d -r /var/svn/svnrepos

用ps -ef | grep svn命令查看服务是否启动成功

3

1.6停用svn命令

当svn的配置文件修改后需要重启svn服务才能生效,关闭svn服务的命令如下:

killall svnserve

2 SVN客户端篇

2.1 安装svn客户端

首先在官网下载svn客户端,下载地址:/

根据自己电脑下载相应的版本

下载中文补丁

首先安装svn客户端:

(安装过程 略)

再安装简体中文补丁:

4

(安装过程 略)

安装完成后电脑会添加这几个应用:

2.1.1 svn的语言设置

单机SVN的设置选项

把以Language选项改为中文,确定

5

2.2 下载版本库

在你的本地项目文件夹或随便一个地方,右键空白处弹出菜单,选择 SVN检出。然后,通过从SVN服务端获取的资源库URL+具体的项目文件夹名下载相应项目,并可以知道下载项目的保存位置。

例如:现在服务器的地址为192.168.1.116,我们把服务上的版本库检出到本地的svnerpos文件夹中

第一这次检出会要求输入用户名与密码,这里输入服务器已经认证的用户名和密码(passwd文件里面的账户密码),选择保存认证下次就不用再输入密码了

用户名:bslk

密码:123456

6

检出完成后将保存服务器端的版本到本地,这里是第一次检出,服务器端也没有版本文件,所以是版本0,并且也没有文件下载

版本库创建成功文件图标会出现一个绿色的对号(如果没有,成功安装SVN后请重启电脑)

2.3 推送版本库到服务器

首先在svnrepos文件夹中创建一个项目文件夹,名为test:

在test中建立文本文件,写入文本:

7

提交修改:在项目文件空白处右键,选择SVN提交,

然后,输入本次提交的版本更新信息(所作修改的注释)、勾选要提交的操作内容(这里选择我们刚才创建的test文件夹和文件),点击确定,即可把本机项目提交到SVN服务器资源库。

如果发生提交冲突,即两人都提交修改,后提交者由于版本落后会提交失败。这时可以先把自己的项目备份,然后从服务端下载最新的项目,再把自己的项目覆盖到本地项目文件夹,最后SVN提交即可成功提交。

8

只要是被SVN记录的文件都会多一个图标(图标含义见附录)。

2.4 获取更新

如果别人修改了SVN服务端资源库上的项目,你想下载最新的项目,则在

本机项目文件空白处单击鼠标右键,选择 SVN更新,即可自动完成下载,并会提示所作的更新有哪些。

注意:在原项目文件夹内选择SVN更新的话,会自动覆盖掉原有内容。建议:先备份,再更新,防止自己本来的项目内容丢失。

2.5 版本还原

SVN具有版本回退功能可以查看之前提交的版本,首先我们先多提交几个版本:

添加新文件后右键提交版本的版本2

同上,添加新文件的版本3

添加新文件的版本4

添加新文件的版本5

9

现在随意删除几个tmp文件,这时如果不点提交的话,可以直接点鼠标右键还原文件,如果提交,那么系统库里的数据也会得到同步,系统也会把它存的数据删掉。

10

点击还原选择想要还原的文件后确定

如果删除文件后提交

11

则文件会被同步删除

2.6 版本回退

刚才选择删除了文件,如果过了几天又后悔了,可以选择退回到版本5找回删除的文件,右键TortoiseSVN,版本库浏览器:

点击HEAD,输入版本5,就能浏览版本5的信息

12

浏览版本5的文件,右键选择文件,可以浏览或检出后悔删除的文件

因为我们现在已经拥有多个版本了,所以也可以在任意位置鼠标右键检出相应的版本和版本中的文件。

3 SVN分支管理篇

3.1 svn分支简述

使用分支最主要的目的是,多个分支可以并行,相互不干扰,而且任何时候都可以合并。其次,容易保证主干的稳定性。

13

没有分支的时候,你的svn可能是这样的:

就一份代码存在主干(trunk),当然也不会有主干这个说法。开发完1.0,继续开发2.0,版本一个一个迭代。

有了分支后,你的svn可能就是这样的了:

主干用来存放稳定的代码,每个版本都会开一个分支,等版本完成后再合并到主干。版本一个一个迭代,但可以并行开发。

3.2 svn分支管理

接下来,简单讲解下 如何使用svn做分支管理。

3.2.1 建立主干分支目录结构

首先创建以下几个文件夹作为项目主干目录结构:

14

3.2.2 创建分支

在主干目录 trunk 右键,在svn菜单选择 分支/标记...

步骤①是分支地址,这里直接以 /branches/1

步骤②是取trunk版本,HEAD revision表示最新版本,其他可通过 显示日志选择

执行 确定 后,到 branches 目录 svn update 就可以看到最新的分支了。

3.2.3 合并分支到主干

分支就是开发目录了,现在分支提交一个文件做测试。

然后,合并这个文件分支到主干。

15

现在到主干目录,右键svn菜单选 合并(M)

这个是将分支或主干的修改合并到当前工作目录,继续如下。

16

接下来点完成,如果没冲突的话,分支文件就合到主干了。

查看trunk文件夹,显示多了一个文件,这个图标的意思是有新文件的添加但是没有提交到服务器(常见图标含义见附录),但这里还需要一个操作,就是在主干提交分支合过来的文件这样才算合并完毕。

之所以要有这一步,除了对分支内容进一步修改,还可以同时合并多个分支。选择权交给用户。

另外,主干内容合到分支,也是使用 合并 命令。

3.3 svn分支应用

根据项目的不同,实际上的分支架构也会不同。假设,我们是做游戏的,项目过于庞杂,版本迭代非常频繁。在版本1.1还没完成时,我们可能就要开发2.0版本,这样,版本1.1和版本2.0就要并行开发。而且,我们对稳定性有非常高的要求。

为此,我们设计了这样的svn架构。

17

3.3.1 测试分支

为了保证主干稳定,我们加了测试分支(如 rel_1.1的测试分支为

rel1.1_test )。测试分支1.1是在分支1.1开发结束后开的,等待测试修复bug完成后,就会把测试分支1.1合入主干及分支1.1。合并完成后,这个测试分支将会关闭。

3.3.2 多分支并行

因为项目需求较多,版本迭代繁杂,所以在版本1.1还没结束时,就开了版本2.0的分支。当分支2.0需要测试合并到主干时,就会从主干合并最新的文件到2.0测试分支,测试通过后,再合并到主干。

3.3.3 分支合并的时机

不同分支的最大区别是功能上线的时间点。我们根据上线周期划分功能,拆分到不同分支。因为开发需求多,迭代过于频繁,所以靠后的分支对比之前的分支通常只是多了某些新功能。这样,分支的出现,避免了未开发完成的功能影响了已开发完的功能,导致当前版本的不稳定。所以,合并分支的时机就是这个分支的功能要不要上线。

这样,主干永远是稳定的,也只有经过测试的内容,才会合入主干。同时,多个版本也可以并行。

4 版本冲突篇

4.1 版本冲突原因

假设A、B两个用户都在版本号为100的时候,更新了这个文件,A用户在修改完成之后提交到服务器,并提交成功,这个时候文件的版本号已经变成101了。同时B用户在版本号为100的文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的101版本上作的修改,所以导致提交失败。

18

4.2 版本冲突现象

冲突发生时,subversion会在当前工作目录中保存所有的目标文件版本[上次更新版本、当前获取的版本(即别人提交的版本)、自己更新的版本、目标文件]

假设文件名是

对应的文件名分别是:

.r101

.r102

。同时在目标文件中标记来自不同用户的更改。

4.3 版本冲突解决

场景:

1、现在A、B两个用户都更新文件到本地。其原始内容如下:

2、A用户修改文件,添加内容“A用户修改内容”完成后提交到服务器

19

3、B用户修改文件,添加内容“B用户修改内容”完成后提交到服务器

B用户提交时提示失败

点击 确定 会提示是否更新,点击 升级 会丢失当前的工作进度,会使A用户的修改覆盖到B用户上。

B用户将文件提交至服务器时,提示版本过期:首先应该从版本库更新版本,然后去解决冲突,冲突解决后要执行svn resolved(解决),然后在签入到版本库。在冲突解决之后,需要使用svn resolved(解决)来告诉subversion冲突解决,这样才能提交更新。

4.4 解决冲突的三种选择

A、放弃自己的更新,使用svn revert(回滚),然后提交。在这种方式下不需要使用svn resolved(解决)

B、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决)。

C、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。

20

4.5 解决冲突

1.在当前目录右键 更新 操作出现以下提示:

2.右键冲突文件 (选中文件--右键菜单—TortoiseSVN—Edit conflicts(编辑冲突)),出现如下窗口

3.如果要使用服务器版本,在Theirs窗口选中差异内容,右键,选择Use this

text block(使用这段文本块)。同理如果要使用本地版本,在协商后,在Mine窗口右键,选择Use this text block(使用这段文本块)。

21

4.修改完成后,保存文件内容。在B用户的冲突目录下,选中文件--右键菜单 —TortoiseSVN—Resolved(解决)。会列出冲突的文件列表,如果确认已经解决,点OK。

5.冲突解决:

6.提交解决冲突后的文件。

4.6 如何降低冲突解决的复杂度

1、当文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。

2、在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘

3、养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版本。每天下班前必须将已经编辑过的文档都提交到版本库。

22

附录

常见SVN图标的含义

灰色向右箭头:本地修改过

蓝色向左箭头:SVN上修改过

灰色向右且中间有个加号的箭头:本地比SVN上多出的文件

蓝色向左且中间有个加号的箭头:SVN上比本地多出的文件

灰色向右且中间有个减号的箭头:本地删除了,而SVN上未删除的文件

蓝色向左且中间有个减号的箭头:SVN上删除了,而本地未删除的文件

红色双向箭头:SVN上修改过,本地也修改过的文件

黄色感叹号(有冲突):--这是有冲突了,冲突就是说你对某个文件进行了修改,别人也 对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人的修改。要解决冲突,如果 你确认你的修改是无效的,则用TSVN还原你的修改就行了;如果认为你的修改是正确的,别人的提交是无效的,那么用TSVN先标记为“解决冲突”,然后就 可以提交了;如果你认为你的修改和别人的修改都有一部分是有效的,那么你就把别人的修改手动合并到你的修改中,然后使用TSVN标注为“解决冲突”,然后 就可以提交了。进入文件夹,寻找有黄色感叹号的文件,这些文件就是发生冲突的地方,根据实际情况处理冲突

米字号(有本地修改代码):--这是说明你有未提交的本地代码。

问号(新加入的资源):--这说明该文件是项目中新增文件资源,新增资源可以是文件、图片、代码等。

红色感叹号(本地代码与库没有保持一致):--这说明本地代码跟库上没有保持一致,如果用23

户想修复,可以将带红色感叹号图标文件删除,直接update即可。

灰色向右箭头(本地修改过)--本地代码没有及时上库。

蓝色向左箭头(SVN上修改过)--记得更新代码后修改,提交前跟svn对比习惯。

灰色向右且中间有个加号的箭头(本地比SVN上多出的文件)--修改完记得跟svn保持一致

蓝色向左且中间有个加号的箭头(SVN上比本地多出的文件)--删除该文件后,再次更新,将svn上文件全部更新下来。

灰色向右且中间有个减号的箭头(本地删除了,而SVN上未删除的文件)--也就是说你删除确认后,一定要记得上库,跟svn保持一致

蓝色向左且中间有个减号的箭头(SVN上删除了,而本地未删除的文件)--比对svn库上代码,确定需要删除后,更新svn(删除无用代码)。

红色双向箭头(SVN上修改过,本地也修改过的文件 )--这个表示本地和svn上都修改过,最好就是把本地修改合并到svn,修改代码前最后先更新。

24


本文标签: 文件 版本 分支 提交 修改