初次安装SVN的过程及心得体会
这是鄙人在完成软件项目与过程管理的课后实验作业的全过程及心得体会。 希望能对初次使用本地版本管理工具SVN的你有所帮助。
软件项目与过程管理是我所在的专业大三时才修习的一门课程,。 在实验课之前,我除了初步地使用过git,其他并无接触过版本管理工具。任课老师在课程开始的几分钟内,给我们简单的介绍了SVN,便将实验指导书和老师曾经编写的一份Java实践开发工具文档给我们,让我们自学其中的内容,并完成实验报告。过程中,实验指导书上的步骤并不详细,导致我及其他同学都没能很好地从其中学习到SVN的配置方法及基本操作方法。 于是,我开始在网上寻求答案,可网上的相关博客文章大多不够详细,且难以理解。几经查找学习并尝试,我终于完成了最基本的操作。
版本控制及SVN的简介
版本控制【Revision control】,最初来源于工程设计领域,是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程,是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。 Subversion就是一款实现版本控制的工具软件,通常也被称为版本控制器,简称SVN。Subversion是Apache软件基金会组织下的一个项目。
- SVN的工作原理
SVN采取客户端/服务器(C/S)模式--在服务器的版本库中保存项目文件的各个版本,所有参与协同开发的程序员在自己本地电脑上保存一个工作副本,这个工作副本可以为任意文件格式,代码、文档或者图片。SVN支持程序将本地副本更新到服务器端的最新版本,也支持将本地副本的最新版本更新到服务器端,并记录下版本号,而且后面的更新不会覆盖前面的更新版本,而是作为一个新的版本被保存下俩--SVN甚至支持将本地工作副本恢复为服务器端保存的某一个历史版本。
Server指的是Subversion服务器端的一个程序;程序接受来自客户端的请求并响应;数据保存在SVN repository
- SVN的基本操作
检出(checkout):将一个服务器端创建好的项目整个下载到本地,这是到项目组后参与开发的第一步,只需执行一次。
更新(update):将本地文件更新为服务器端的最新版本,通常为每天工作开始前或修改公共文件之前执行一次。
提交(commit):将本地修改提交到服务器端。通常为每天工作完成或每实现一个功能、完成一个慕课时执行一次。
Subversion的安装与配置
- 下载与安装
Apache-Subversion-1.10.2 官方下载地址:https://www.visualsvn.com/dow...
下载后解压至安装目录,如:我放在了D:作业软件过程与项目管理实验课实验二 Subversion及TortoiseSVN实验Apache-Subversion-1.10.2 - 配置
接下来我们需要为能够启用SVN,配置变量环境。
找到系统变量中的path,添加变量值:D:作业软件过程与项目管理实验课实验二 Subversion及TortoiseSVN实验Apache-Subversion-1.10.2bin
ps:这个变量路径也就是我们解压后得到文件目录中bin文件夹的路径。配置环境变量的好处是我们可以在命令行的任意目录下运行bin文件夹中的可执行程序。 - 配置检查
我们可以通过在命令行内输入svn --version
,以检验svn环境变量配置是否正确。显示出如下图所示的SVN版本信息等内容,即表明环境变量配置成功。
显示的内容除了版本信息以外,还显示了一些可以使用的版本库访问模块到目前为止,我们只配置好了SVN的Server服务器,要想让SVN真正能用,我们还需要创建svn的repository,用于存放提交上的数据。
创建SVN版本库
我在D盘创建 D:\svnRep,svnRep即本地版本库的根目录,我们希望svnRep能帮助我们管理多个项目。所以我们在svnRep目录下创建不同的文件夹,如我创建的OA和ERP,作为多个项目的存储库。但是此时我创建的文件夹还并未与Server相连,所以我们还需要在命令行窗口下输入一些指令来完成这项操作。 我们打开命令行,使用`svnadmin create D:\svnRep\CRM`,将该版本库与Server连接。 ![图片描述][3] create后的路径为版本库根目录的路径 此时,在D:\svnRep\CRM目录下会多出一些文件。如下图所示。 ![图片描述][4] conf文件内是放在的是跟当前版本相关的配置文件,之后我们在设置版本库权限的时候,会使用到其中的文件;db文件内保存的是server的数据库文件;hooks内存储的是钩子程序(相关操作触发器);locks跟文件的锁定有关
启动svn服务器
运行客户端,我们需要在命令行中输入命令 `svnserve -d -r D:\svnRep\CRM` ![图片描述][5] 此时,命令行不再允许你输入指令,表明服务器已经启动 我们可以通过查看它是否监听3690的端口确认服务是否启动。 在另一个命令行中输入如下指令 netstat -an,查找地址尾号为3690的地址,如果存在则表明服务确实启动了。 ![图片描述][6] 我们可以看到如图所示的 尾号为3690的本地地址
- 注册Windows服务
由于启动服务器的命令行窗口是在第一个命令行窗口,一旦此命令行窗口被关闭,服务就会停止。我们在实际操作中,一直开着该命令行窗口十分不便,所以我们可以将svn服务端程序注册为Windows服务,就可以让svn服务随系统一起启动。
步骤如下:
Step 1 启动 计算机->管理->服务和应用程序
服务中有很多可自动或手动启用的服务
Step 2 重新开启一个命令行窗口,输入命令sc create SVNservice binpath= "D:\作业\软件过程与项目管理实验课\实验二 Subversion及TortoiseSVN实验\Apache-Subversion-1.10.2\bin\svnserve.exe --service -r D:\svnRep" start= auto depend= Tcpip
之所以指定的版本库为svnRep,是因为这样访问时我们可以决定访问svnRep下具体某一个仓库。
执行了这段指令之后,命令行可能会弹出windowsOpenSCManager 失败5 拒绝访问的提示。这是因为我们创建新服务的权限不足。有两种解决方法,第一种是以管理员身份运行命令行,第二种是在注册表HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA
将其值改为0。
创建成功的提示内容如下图所示。
此时,我们可以再次通过netstat -an
来查看是否存在3690的本地地址。
客户端访问及svn三个基本命令的操作
接下来我们进入svn的三个基本命令的操作。 我在D:\WorkSpace\WorkSpaceSVN 目录下创建了两个工作区文件夹,分别为SpaceA和SpaceB,代表两个成员的工作代码等存放的文件夹。我们将通过svn实现文件在两个工作区文件夹的检出、更新和提交。 在命令行中输入指令 `svn checkout svn://localhost/CRM`由于我们现在是将svn的Server部署在本机服务器上,所以是localhost。
这步操作我们是在SpaceA的目录下执行,所以是在将服务器库中的文件下载到SpaceA中,但是当前服务器的版本库中,并没有文件,所以SpaceA中仍热看不到文件。 执行指令后,命令行提示 检出版本 0。 下面,我们在SpcaeA的CRM下创建一svn_test.txt文件。在SpaceA\CRM\CRM的目录下提交这个文件。在命令行中输入的指令为`svn commit svn_test.txt`,执行后命令行可能会提示 提交失败。
原因是初次提交的时候,提交的文件未纳入版本控制。所以我们要在命令行中输入 svn add test.txt
.
下面,我们在命令行中输入 svn commit svn_test.txt
,执行后命令行可能还是会提示错误。
原因是,我们在提交时还应该添加日志。于是,我们在命令行中输入 svn commit -m "My first commit" svn_test.txt
,但是命令行可能还是会提示错误。
这是由于权限不足,于是,我们还需要版本库的conf中去设置权限。打开D:\svnRep\CRM\conf中的svnserve.conf将#anon-access=read,修改为anon-access=write。注意:annon-access前不能留有空格。修改并保存后,再次在原来的命令行中输入`svn commit -m "My first commit" svn_test.txt`,提示如下,即commit成功。
提示后的版本号为1,这1指的不是每个文件的版本号,是整个版本库,当前版本的版本号。
我们再通过命令行从版本库中commit文件到SpaceB中。
接下来我们来实现版本库文件的更新。
修改SpaceB中的svn_test.txt中的内容。如下图所示。
再将修改后的svn_test.txt,commit到版本库。如下图所示。
提交后的版本号为2.
下面,我们进入到SpaceA中的CRM,我们通过命令行的指令来更新CRM中的svn_test.txt.
指令为 svn update svn_test.txt
此时,我们可以发现SpaceA中的svn_test.txt中的内容已被更新。
相关推荐
pub_svnserve.conf的 pub_authz.conf的配置文件有非法字符的原因引起,需要查找pub_authz.conf提的非法内容比如多余的空格删除或直接将pub_authz.conf