版本管理工具可以简单的理解为一个存储代码的仓库,可以让多个人下载、修改、提交代码,并且能够找回删除的代码,对代码进行版本管理。
先来谈谈svn。
svn是我现在工作中用到的工具,跳过理论知识,直接讲使用。
1.1 svn的下载与安装
可以在http://subversion.apache.org/packages.html 中找到各种svn的下载链接。
推荐CollabNet提供的版本,CollabNet是svn原作者提供支持的,功能最强大,但是也最臃肿(最新版的安装包只有6M左右,安装过程中询问你是否安装其他module)。
因为只需要客户端功能,所以在http://www.collab.net/downloads/subversion官网下载Subversion 1.8.5 (Windows 64-bit)版本。(也可在我的网盘下载此软件http://yunpan.cn/QD3KGSRMVS5mQ)
Subversion Edge是针对服务端的软件,包括整合了Subversion, Apache和ViewVC这三款软件,有兴趣和需要的同学可以自己去研究一下,这里不多做介绍。
打开CollabNetSubversion-client-1.8.5-1-x64.exe文件,一路next即可。安装完成后打开cmd,输入
svn --version
显示出相关的版本信息,表示安装成功。
注:本文所用版本不需配置环境变量,软件安装过程中会自动添加环境变量。
1.2 一些简单的命令操作
代码仓库,首先需要创建一个仓库。在svn中需要新创建一个root根目录,然后在root目录中创建多个仓库目录。一般情况下,每个项目对应一个仓库目录。
svnadmin create E:/svn_repo/projectName
通过此命令即可创建一个项目的仓库。
svn --help
此命令可以查看到svn的所有命令,但是这里不介绍这些命令的含义,通常情况下,我们是使用可视化的客户端进行操作。
1.3 安装可视化客户端
我们通过大名鼎鼎的TortoiseSVN进行svn的管理。
注:建议在安装结束后,注销一次,避免文件状态提示显示不正确。
安装成功后,可以在鼠标的右键菜单中看到svn选项。
1.4使用TortoiseSVN
A.首先,我们通过TortoiseSVN来实现刚才创建项目仓库这一操作
先新建一个文件夹,在此空文件夹内单击右键-->TortoiseSVN-->create repository here
浏览文件目录结构,可以看到和我们之前通过命令行创建的代码仓库结构相同。
在项目中,此操作通常由系统部/配置管理人员,在代码服务器(通常为linux系统),通过命令行创建执行,不需要coder熟悉
B.检出仓库内代码(连接代码仓库)
创建一个目录(E:\svn_test)作为我们开发用的工作空间,在文件夹内执行
右键-->SVN Checkout
因为代码仓库在本地,所以URL为localhost,协议为svn,后跟仓库名称。本示例中完成URL为svn://localhost/projectName。
单击OK后,报下图错误
![]()
这是因为我们的svn服务并没有运行,所以代码仓库无法连接。
svn服务的端口号为3690.可通过cmd,执行
netstat -na
查看服务是否启动。
通过命令行启动svn服务
svnserve -d -r E:\svn_repo\projectName
再次执行netstat -na,可以看到3690端口已处于监听状态
此时执行
SVN Checkout操作,发现工作空间目录下,增加了一个.svn目录,说明工作目录已与代码仓库建立了连接。
同时Checkout是将代码仓库下载到本地的过程。因为暂时代码仓库中并没有文件,所以只有一个.svn目录。
下面我们就来谈谈如何向代码仓库中上传文件。
C.上传文件
有时我们并不需要下载代码仓库,而是直接上传文件到代码仓库中,尤其是项目新建时,上传一些项目基本文件目录。
这时我们需要执行的是import操作。我们创建一个test文件夹,在里面创建一个TheFirst.java文件。
注意:import不能直接操作theFirst.java 操作test文件夹,并不会上传test文件夹,而是将test内部的文件夹及文件都上传到代码仓库。
单击需要上传的文件夹(test)右键-->TortoiseSVN-->import
点击OK后,又报错。
验证失败。当然会报错,不然我们的代码仓库早就被别人上传一些乱七八糟的文件了。
这里我们不讲svn具体的权限控制体系,为了掩饰,我们修改一下代码仓库中的conf下的svnserve.conf文件(E:\svn_repo\projectName\conf)
搜索到# anon-access = read ,并修改为 anon-access = write去掉#注释,read代表读权限,write代表读写权限。
再次执行import操作,ok 操作成功。
如果你再次针对这个文件夹执行import操作,会提示你文件已存在,无法上传的提示。
此时文件已保存在代码仓库的db文件夹中,但是我们在此文件夹中却找不到我们上传的文件,这是由于存储方式导致的。
D.获取最新代码文件
打开执行过check out的工作空间文件夹(E:\svn_test),也没发现刚上传的
TheFirst
.java文件,这是因为svn本地和代码仓库并不是实时同步的,我们需要手动操作。
先看一下更新操作。
当然,如果你再找一个文件夹,执行checkout操作,是可以看到
TheFirst.java文件的(没有test文件夹)。
我们打开工作空间文件夹(E:\svn_test),在空白处点击右键
-->SVN Update
提示信息可以查看修改了哪些文件。
此时,目录下新生成了一个名为projectName(仓库名称)的文件夹,里面只有一个TheFirst.java文件。
E.工作空间上传文件
import操作并不常用,代码上传通常情况下是在一个执行过check out的工作空间目录下执行。
我们新创建一个文件TheSecond.java, 右键单击
-->TortoiseSVN-->add
此时,就将一个本地文件加入到svn管理中
绿色对号,说明和代码仓库中文件一致。蓝色加号则表明为新添加的文件,并且只存在本地,未提交到代码仓库中。
右键单击TheSecond.java文件 -->SVN Commit
尽量养成在Message中填写注释的好习惯,否则时间一长,代码就会特别混乱。
不过不需要署名,因为在项目中,每个人都会有一个账号,不会像现在这样出现匿名用户。
此时,TheSecond.java文件已提交到代码仓库中。另一个用户可以在工作空间内通过Update,获取此文件。
F.项目流程
系统部根据项目名称创建代码仓库(svnadmin create E:/svn_repo/projectName) -->
PM上传项目框架文件(import)-->
coder下载代码,执行开发工作(Check out、 Update、 Commit)
代码管理仓库就是为了互相协作,减少代码管理的繁琐,提高工作效率。
G.解决冲突