• 阿里云河南授权服务中心--[ 阿里云精英级合作伙伴 ]
  • 阿里云河南授权服务中心电话 :0371-56982772

什么是SVN?如何搭建和使用SVN教程
发布时间:2018-11-27 15:09

什么是SVN(Subversion)?

有一个简单但不十分精确比喻:
SVN = 版本控制 + 备份服务器
简单的说,您可以把SVN当成您的备份服务器,更好的是,他可以帮您记住每次上传到这个服务器的档案内容。并且自动的赋予每次的变更一个版本。

通常,我们称用来存放上传档案的地方就做Repository。用中文来说,有点像是档案仓库的意思。不过,通常我们还是使用Repository这个名词。基本上,第一次我们需要有一个新增(add)档案的动作,将想要备份的档案放到Repository上面。日后,当您有任何修改时,都可以上传到Repository上面,上传已经存在且修改过的档案就叫做commit,也就是提交修改给SVN server的意思。针对每次的commit,SVN server都会赋予他一个新的版本。同时,也会把每次上传的时间记录下来。日后,因为某些因素,如果您需要从Repository下载曾经提交的档案。您可以直接选择取得最新的版本,也可以取得任何一个之前的版本。如果忘记了版本,还是可以靠记忆尝试取得某个日期的版本。

为什么要用SVN?

1。备份工作档案的重要性。您永远不知道计算机上的硬盘何时会坏掉。根据经验法则再加上墨菲定理,坏事情往往都发生在最重要的时刻。例如,要release东西的前一刻,硬盘完全坏掉,无法修复。所以,常常备份工作数据是非常重要的。大部分公司的server都会有专门的备份机制,甚至是异地备援。绝对比放在自己的计算机里头,或是随身碟上面来的安全。

2。版本控管的重要重要性。您无法保证手头上最新版本永远都是对的。很多时候,在经过数天努力工作后,您才发现走错方向。需要将所有的修改回复到数天前版本。没有几个人能够完全记住自己修改过什么东西。如果没有做好版本控管,那么,最差的状况就是要全部重来。

3。伙伴间的数据同步的重要性。很多时候,除了您个人外,还有其它的伙伴也需要您的档案。怎么把最新的档案提供给伙伴呢?用e-mail?根据经验,用e-mail是一个很差的办法。到了最后,根本就不知道哪一封e-mail才是新的。因为可能您最新的e-mail已经被当成垃圾信给丢了。别忘了,现在很多e-mail软件都有anti-spam(反垃圾邮件)的功能,说不定这些信件都被当成广告信给处理掉了。而且,您也应该知道一般档案如果放在e-mail内,档案大小会变得比较大(通常是原来的4/3倍以上)。如果每天更新一次,恐怕几天没收信的话,信箱就爆了!

4。如果没有一个好的办法,备份不同版本是很耗费硬盘空间的。例如:您有一个总共10MB的目录,使用单纯的档案备份。如果有10个版本就会变成100MB。20个版本就有200MB。如果,不想备份这么多版本,势必就是要减少备份的次数。拉长备份周期将会导致数据遗失的危险性增高。把旧的不需要的备份删除?根据经验,只要时间一拉长,您跟本就不知道一个月以前的版本是重要或者是不重要。

---------SVN能帮我们解决上面的问题吗?答案是肯定的:


SVN Repository可以是自己计算机上的一个目录,或者是随身碟(不建议这样用)。当然也可以是公司的服务器。

SVN有很棒的版本控管机制。所有上传的版本都会帮您记录下来。日后您可以随时取得某一个时刻的版本。而且,也有版本分支及合并等好用的功能。

SVN可以让不同的开发者存取同样的档案,并且利用SVN Server作为档案同步的机制。也就是说,您有档案更新时,无须将档案寄给您的开发成员。只需要告诉他新的版本已经在SVN Server上面,请他自己去SVN Server上面就可以取得最新版本。而且,SVN Server也可以做到当您上传新版本后,自动发信给相关的成员。

SVN的存放档案方式是采用差异备份的方式。也就是说,他只会备份有不同的地方。所以很省硬盘空间。此外,他也可以针对所谓的非文字文件进行差异备份。


总之,Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。
这些数据放置在一个中央资料档案库(repository) 中。这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。这样您就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。

SVN 的一些概念

  • repository(源代码库):源代码统一存放的地方
  • Checkout(提取):当您手上没有源代码时,您需要从repository checkout一份源代码
  • Commit(提交):如果您已经修改了代码,您需要Commit到repository
  • Update(更新):当您已经Checkout了一份源代码,Update一下,您就可以与Repository上的源代码同步,您手上的代码就会有最新的变更

日常开发过程其实就是这样的(假设您已经Checkout并且已经工作了几天):Update(获得最新的代码)—> 作出自己的修改并调试成功 —> Commit(大家就可以看到您的修改了)。
如果您与同事同时修改了同一个文件,SVN可以合并你们的改动,实际上SVN管理源代码是以行为单位的,就是说你们只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN会提示文件Confict(冲突),需要手动确认。

安装SVN
您可以采用以下任一种方法安装SVN。
使用SVN版本控制镜像
您可以在云市场购买使用 SVN版本控制镜像 的ECS实例。
创建了实例后,按以下步骤操作:

  1. 登录 ECS管理控制台
  2. 在左侧导航栏里,单击 实例
  3. 选择地域。
  4. 找到新创建的ECS实例,在 IP地址 列获取实例的公网IP地址。

手动安装SVN
本文以CentOS 7.2 64位系统为例,说明如何在CentOS 7.2上安装SVN。

  1. 远程连接Linux实例
  2. 运行以下命令安装SVN。

yum install subversion

  1. 运行以下命令查看SVN版本。

svnserve --version



  1. 按以下步骤创建版本库:
    1. 运行以下命令创建目录。

mkdir /var/svn

    1. 依次运行以下命令创建版本库。

cd /var/svn svnadmin create /var/svn/svnrepos

    1. 依次运行以下命令查看自动生成的版本库文件。

cd svnrepos ls



Subversion目录说明:

  • db目录:所有版本控制的数据存放文件。
  • hooks目录:放置hook脚本文件的目录。
  • locks目录:用来追踪存取文件库的客户端。
  • format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
  • conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)。
    1. 运行命令 cd conf/ 进入conf目录(该SVN版本库配置文件)。返回结果如下:
  • authz:是权限控制文件。
  • passwd:是账号密码文件。
  • svnserve.conf:SVN服务配置文件。
    1. 按以下步骤设置账号密码:
    1. 运行 vi passwd
    2. 按 i 键进入编辑模式。
    3. 在 [users] 块中添加用户账号和密码,格式:账号=密码,比如示例中的suzhan = redhat(注意等号两端要有一个空格)。
    4. 按 Esc 键退出编辑模式,并输入 :wq 保存并退出。



    1. 按以下步骤设置权限:
    1. 运行 vi authz
    2. 按 i 键进入编辑模式。
    3. 在末尾添加如下代码(其中,r表示读,w表示写):

[/] suzhan=rw

    1. 按 Esc 键退出编辑模式,并输入 :wq 保存并退出。



    1. 按以下步骤修改svnserve.conf文件。
    1. 运行命令 vi svnserve.conf
    2. 按 i 键进入编辑模式。
    3. 打开以下几个注释(注意每行不能以空格开始,等号两端要有一个空格):

anon-access = read #匿名用户可读,您也可以设置 anon-access = none,不允许匿名用户访问。设置为 none,可以使日志日期正常显示 auth-access = write #授权用户可写 password-db = passwd #使用哪个文件作为账号文件 authz-db = authz #使用哪个文件作为权限文件 realm = /var/svn/svnrepos #认证空间名,版本库所在目录

    1. 按 Esc 键退出编辑模式,并输入 :wq 保存并退出。



    1. 运行以下命令启动SVN版本库。

svnserve -d -r /var/svn/svnrepos

    1. 运行命令 ps -ef |grep svn 查看SVN服务是否开启。

如果返回结果如下图所示,表示SVN服务已经开启。



说明 运行以下命令停止SVN命令。
killall svnserve
添加安全组规则
SVN服务的默认端口为TCP 3690。您需要登录 ECS管理控制台添加安全组规则 放行TCP 3690端口。
在Windows上测试
这部分说明如何从本地(Windows操作系统)访问ECS实例上安装的SVN服务。

  1. 在本地机器上安装 TortoiseSVN客户端
  2. 在您的本地项目文件夹(如示例中的C:\KDR),右键空白处弹出菜单,选择 SVN检出



  1. 指定资源库URL,格式为 svn://实例公网IP地址/资源库名;指定 检出至目录(如本示例中的C:\KDR);再单击 确定



如果出现以图所示信息,表示检出成功。



说明 第一次登录需要输入密码,一切以passwd文件里面的账户密码为主。
修改并提交项目
将项目下载到本地机器后,您可以在添加文件、修改文件、删除文件等。
提交修改
按以下步骤提交修改:

  1. 在项目文件空白处单击右键,选择 SVN提交



  1. 输入本次提交的版本更新信息(所作修改的注释)、勾选要提交的操作内容,单击 确定,即可把本机项目提交到SVN服务器资源库,覆盖掉资源库项目从而实现更新。

说明

  • 如果发生提交冲突,即两人都提交修改,后提交者由于版本落后会提交失败。这时可以先备份自己的项目,从服务端下载最新的项目后,再将自己的项目覆盖到本地项目文件夹,最后SVN提交即可成功提交。
  • 假设您刚刚删掉了一个文件,这里就会显示如下截图所示信息。



获取更新
如果别人修改了SVN服务端资源库上的项目,您想下载最新的项目,则在本机项目文件空白处单击右键,选择 SVN更新,即可自动完成下载,并会提示所作的更新有哪些。
说明 在原项目文件夹内选择SVN更新,会自动覆盖原有内容。我们建议您先备份,再更新,防止自己本来的项目内容丢失。
SVN还原

  1. 打开一个文件夹,右键检出数据。
  2. 删掉数据。
  3. 根据您是否已经提交修改采取不同的操作:
  • 未提交时,右键单击空白处,选择 TortoiseSVN > SVN 还原
  • 已提交时,系统库里的数据也会得到同步,系统也会把它存的数据删掉。此时,您需要采取以下方法还原数据:
    1. 查看日志,确认删除了哪些文件。



    1. 将删掉的文件保存版本到删掉的位置。



  1. 打开原文件夹,选择 SVN提交,系统库里的数据就和这个文件同步了。

售前咨询:

0371-56982772