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
版权声明:本文标题:SVN使用手册 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1703159977a440408.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论