一,什么是SVN(subversion)
它是一个自由开源的版本控制系统,一组文件盛放在中心版本,记录每一次文件和目录的修改情况,subversion允许把数据恢复到早期版本,或是检查数据修改的历史,subversion可以通过网络访问它的版本库,从而使用户可以在不同的电脑上进行操作。
二.SVN服务器的搭建和使用
1.首先下载svn服务器:
http://subversion.apache.org/download/
我下载的服务端是 Setup-Subversion-1.8.16.msi,注意下载时的和操作系统的位数一致,我的是64位
2.安装服务器
安装服务器端,安装路径可以自己改,我的安装路径是D:/Program Files/Subversion
3.安装客户端
下载客户端TortoiseSVN-1.9.3.27038-x64-svn-1.9.3.msi,
并下载对应版本的语言包安装LanguagePack_1.9.4.27285-x64-zh_CN.msi
安装客户端,安装路径也可以自己改,我的安装路径是D:/Program Files/TortoiseSVN
4.安装服务器版本控制库
路径可以自已定义,我的做法是在D盘上新建一个svn文件夹,双击打开它,然后在里面点击右键,[TotoiseSVN]->[Create Repository here]进行创建,版本库模式指定为默认的即可。
Repository创建完毕后会在目录下生成若干个文件和文件夹:
- conf目录是用来设置参数配置管理的目录;
- db目录就是所有版本控制的数据文件;
- hooks目录放置hook脚本文件的目录;
- locks用来放置Subversion文件库锁定数据的目录, 用来追踪存取文件库的客户端;
- format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
(
本步骤也可以用命令行来完成:svnadmin create D:/svn/repository)
5.设置版本控制库权限
打开/conf/目录,打开svnserve.conf找到一下两句:
# [general]
# password-db = passwd
去之每行开头的#,其中第二行是指定身份验证的文件名,即passwd文件
同样打开passwd文件,将
# [users]
# harry = harryssecret
# sally = sallyssecret
将# [users]开头#字符去掉,这是设置用户,一行一个,存储格式为“用户名 = 密码”,
如可插入一行:wang=123,即为系统添加一个用户名为wang,密码为123的用户
6.启动服务器,并将svn设为系统服务
由于win7的安全权限问题,安装系统服务时会出现“[sc] openSCManager 失败 5 拒绝 ”错误。
解决方案:
打开cmd 输入:
sc create svnser binPath= "D:/Subversion/bin/svnserve.exe --service --root D:/svn"
回车。
不提示错误即为成功。
如果安装不成功,请在CMD中运行sc delete svnser,然后再重新安装
(“=”前不得有空格,后必须有空格。 svnser为自定义的服务名称)
7.自动启动:
启动后在计算机->管理->服务和应用程序->服务->找到svnser,右键属性找到启动类型改为自动,
这样每次开机它都会自动运行了
8.访问SVN服务器
在桌面上点右键[TotoiseSVN]->[Repo-browser]在地址栏里输入svn://localhost/repository,这样就可以访问svn了
三.Eclipse插件安装
1. 下载eclipse支持SVN的插件(也可通过eclipse market直接安装)
2.在eclipse的dropins文件夹下引入该文件
3.重启eclipse,即可完成插件的安装
4.检验安装是否成功
四.SVN的使用
提交代码产生冲突的解决
1.提交本地代码前先更新,更新的目的让本地代码与服务器中最新版本的代码保持一致。
2.当你更新完以后,想提交本地代码时,在这个时间间隔内,别人也对同一文件先一步作了提交,并对该文件作了修改,
那么你提交时,必须会产生冲突。(如果提交前不更新,那有很大概率会产生冲突,否则,会减少冲突的机率。)
如下这种情况指你提交1.txt文件时和别人发生了冲突:
3.产生冲突的解决方案
- 首先打开1.txt,文件内容如下
- 然后去掉多余代码,1.txt变成如下:
- 进行提交,还是提交不了
原因是冲突导致了产生了三个文件,解释如下:
1.txt.mine是冲突前自己本地的文件内容(已修改)
1.txt.r4是冲突前和版本库保持一致的本地文件(未修改)
1.txt.r5是别人赶在你提交前已提交的文件,也是svn版本库中最新的文件
其中<<<<<.mine和======之间的代码块是你自己的
而======和>>>>>>>.r5之间的代码块是别人与你冲突的
解决方案一:
你选择revert(回滚)操作,由表示自己放弃更新的部份,然后直接提交,你的代码就是服务器上最新的代码,即另外一个用户提交后的代码,你的代码不会被提交。则此时其他三个文件被自动删掉。
这时1.txt内容如下:
aaaasdf11222333b
此时,你自己要修改的代码可以手动复制进去,然后即可提交成功
解决方案二:
可以选择编辑冲突(editConficts)按钮,进行合并(merger)操作,这种做法需要双方共同协商将代码改一致后再提交
程序员解决冲突按步骤走:
有冲突:
- 与资源库同步
- 更新操作
- 编辑冲突
- 标记冲突已解决
- 提交
无冲突:
- 与资源库同步
- 提交
4.创建分支及合并
,适用情景:当我们把项目的所有文件放在主杆(trunk)时,由于需求的变更,我们还需要在主杆上继续开发,在此我们可以
新建一个分支,来增加新的需求那一块,主杆上继续开发,等分支上的代码没有问题的时候,再合并到主杆上来。
创建分支的最大目的是:跟主线进行并行开发的时候并不影响主线的开发
一般步骤:
- 新建分支
- 合并分支到主线上