SVN的使用

2017-08-17  本文已影响0人  木心若素

3个问题

  1. 安装优化软件环境nginx,lvs <== 运维工程师
  2. 程序代码(不断更新)<==开发工程师,开发+运维
  3. 配置变更(不断变更)<==运维工程师

SVN介绍

SVN是Subversion的简称,是一个开放源代码的版本控制系统,主要用来管理代码的,就跟
文件服务器和ftp服务器一样,但是,它能监控文件的修改并记录每次的变化,必要时可以还原
到之前的某一个修改,采用集中式的代码管理。
开始新一天的工作:


0 、在中央库上创建或从主干上复制一个分支
1、从服务器下载项目组最新代码(check out)。
2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
这就是经典的svn工作流程。
缺点:和中央库的话交互需要网络(一般局域网不用担心),数据版本记录需要备份

SVN和git的区别

svn是一个集中式的版本控制系统。
git是一个分布式的版本控制系统,本地有一个和远程一样的库(这2个库逻辑上是等价的),支持离线开发,而且git也可以做这种集中式的版本控制,只是操作上可能没有svn快捷而已,每次提交时都让本地库和远程库进行同步的话就是集中式的版本控制。

SVN的运行模式以及访问方式

服务器端访问主要3种:
1. 单独的服务器访问
2. 借助apach的Http访问
3. 本地直接访问
本人用的是VirtualSVN,下载地址:
https://www.visualsvn.com/server/download/

客户端访问方式:一般是通过安装客户端软件
下载地址:https://tortoisesvn.net/downloads.html

SVN档案库数据格式(类似文件系统):

BDB(事务安全型表类型)
FSFS(一种不需要数据库的存储系统)
VDFS ( 多仓库分布式的文件存储系统)

Replication links between a master repository and its slaves are maintained by a service named VisualSVN Distributed File System Service (also referred to as 'VDFS service') running on all the partner servers.
The VDFS service is disabled by default. You are required to enable this service on all the replication partners to get started with the repository replication functionality.
简单来说这个是VisualSVN基于FSFS文件系统格式扩展的。也就是说,分布式版本管理DVCS兴起之后,大家发现多个仓库的好处了,开始给SVN增加这个功能。至于FSFS本身是SVN在2004年开始替换Berkeley DB的,是基于文件系统概念设计的,而不是基于数据库的概念,采用目录树的结构去做transaction,可以在目录外创建完一次提交,然后把完成的提交一次性移动进版本历史。另外,根据他们的数据结构,对Berkeley DB的append操作是O(N^2)的,而FSFS是O(N)的。如果你不是太在乎私有格式,也需要多仓库同步,可以用VDFS,官方文档说了VDFS默认的service是没有启动的,所以对你日常应该没有影响。如果不喜欢私有格式,就用FSFS就好。


SVN服务端

SVN服务端的配置有多种方案:可以安装Svnserve服务,也可以安装Apache服务,但最简单的莫过于使用VisualSVN Server这种方式.(https://www.visualsvn.com/server/download/)

  1. 开始安装点next


    图片.png
  2. 同意一下协议


    图片.png
  3. 选择服务器版和管理源工具


    图片.png
  4. 这里选标准版的,专业版要密钥的,但是标准版好像不支持分布式版本仓库)


    图片.png
  5. 自定义安装目录以及仓库位置


    图片.png

版本库:版本库就是存放文件、代码及版本信息的地方。服务器针对某一项目创建版本库后,客户端才能访问该项目的文件、代码。因此在服务器上创建、删除版本库是十分重要的工作。

  1. 点“next”开始正式安装,之后启动可以看到如下界面


    图片.png

服务器端的使用

  1. 启动服务器端:安装成功后点windows的“开始”会看到如下图标,点进去就是。


    图片.png 图片.png
  2. 创建版本库
    a. 这里提供了2种格式的仓库,一种是普通的FSFS,一种是VDFS(这个格式的目前只有专业版支持)进入管理界面,选中Repositories,右键create New repositorie...

图片.png 图片.png

b. 创建输入仓库名称后

图片.png
c. 提示选择Repository Structs,选择single-project repository 图片.png

d. 然后会提示配置仓库权限,这里选择customize permissions自定义我们的权限,

图片.png

e. 最后点击finish完成创建。


  1. 删除版本库
    选中需要删除的仓库,右键删除就是。注意:删除版本库是无法撤销的,请谨慎处理
  2. 用户管理
    a. 创建用户
    选中Users,右键选择create User ...,按要求输入用户名和密码便可。

    b. 编辑用户
    选中用户,右键便会看到对应的功能按钮。
图片.png

例如:修改用户密码


图片.png
  1. 组管理
    组管理和用户管理一样的,这里就不赘述了。

  2. 权限管理
    a. 权限一般是作为仓库的一部分功能处理的,所以,当你想给一个用户或者一个组分配权限的时候,你需要直接右键选中你需要分配去权限的仓库,然后选中properties..单击出现如下面板,有什么想配置的权限直接使用面板就是。点击Add可以便可以进行权限配置。


图片.png

b. 自己选择是给所有人分配,还是某个组还是某个用户,分配完成后点应用便可。




SVN客户端的使用

SVN客户端为TortoiseSVN,安装之后就可以访问服务器端的版本库。读取项目文件、代码,还可以将修改后的文件、代码上传到服务器上,与项目组成员共同维护项目文件、代码。

在URL of repository下输入版本库的地址。在Export directory下输入本机存放目录。导出深度有四个选项,分别为:
Fully recursive(深度递归):导出指定目录下的文件、各级子目录以及各级子目录下的文件。也就是全部导出。默认就是选择该项;
Immediate children, including folders(直接子节点,包含文件夹):导出指定目录下的文件和一级子目录,但不导出一级子目录内的文件;
Only file children(仅文件子节点):只导出指定目录下的文件,不导出一级子目录及一级子目录内的文件。
Only this item(仅此项):只导出指定目录。导出后就是一个空目录,没有什么实际意义。
Revision是版本的意思。项目组里任何一人修改了文档,上传到服务器上后都会形成一个新的版本,也就会有一个新的版本号。HEAD revision 表示最新的版本,也可以输入指定的版本号。
配置好后,单击"OK"按钮。
因为要和服务器通讯,因此与导入一样,可能需要进行用户认证(我这里的版本不需要)。

需要注意的是这个增加只是增加到本机的BASE,而不是直接增加到服务器的版本库中

message中写入你对项目文档都做了哪些修改。一定要养成填写该项的好习惯,方便项目组其他成员清楚项目都发生了哪些变化。
Changes made下的列表列出了哪些文件被改变了。改变的文件分为两大类:一类是在Copy版中存在,但在BASE版中不存在的文件,即non-versioned文件;另一类是在BASE版中存在的文件,即versioned文件,其Text status有可能是modified(修改)、added(增加)、deleted(删除)……
列表中勾中要提交的文件,单击"OK"按钮即可完成提交操作。提交过程中可能会产生冲突,其解决方法请参考"冲突"这一节。

提交界面(图3.11)中,鼠标右键单击一个non-versioned文件,弹出菜单中有【Add to ignore list】。以下图为例,它有两个选项,一个是文件本身,另一个是*.pch。前者表示忽略该文件,下次提交时该文件将不再显示在列表里。后者表示忽略所有扩展名为pch的non-versioned文件,下次提交时这些文件将不再显示在列表里。应该谨慎使用后者。

项目成员A负责维护开发组成员名单,项目成员B负责测试组成员名单。
现在A修改test.txt文件内容并提交:



项目成员B修改test.txt如下:

当项目成员B提交的时候,就会出错。其出错界面如下:

上图说明test.txt已经被人修改,需要先更新。成员B按提示要求Update了本机代码,其界面如下。


双击冲突,手动解决冲突。


请注意Merged这个单词,它表示SVN将版本库最新版本的1.txt和B修改的1.txt合并了。合并的结果如下,其内容正是A、B期望得到的结果。注意这个最新的文件只保留在B的本机上,需要B提交后版本库里的test.txt才能得到更新。

也就是说,对于文本文件,SVN有合并能力。它能将项目组成员的改动集中起来,减少了文件冲突的发生。但是SVN的合并不是万能的。假如B对1.txt做了非常大的改动,Update的时候将无法合并。

2、如果A未对1.bmp做任何修改,暂时又不想编辑它,请尽快解锁。方法为右键单击该文件,单击弹出菜单里的【TortoiseSVN】【Release lock】菜单项;
3、如果A对1.bmp做了修改并确认无误后,请尽快提交它。方法为右键单击该文件,单击弹出菜单里的【SVN Commit...】菜单项。提交之后,SVN自动解锁该文件。
项目组成员B要编辑1.bmp同样遵循该步骤。因为一个文件不能同时被两个用户锁定,这样就保证了1.bmp不会发生冲突。


分支的创建,删除,合并,切换

SVN基础版本架构解决方案
多主干多分支并行开发

1.创建分支

右击已经存在的SVN项目->branch/tag,弹出框的to path输入新的分支名称,建议/branch/xxx,点击OK就创建出xxx分支.(建议创建前先svn update)

2.切换分支

右击已经存在的SVN项目->switch,弹出框的to path输入分支名称,上面新建了/branch/xxx分支,如果想要切换/branch/xxx分支,则输入/branch/xxx点击OK.

3.合并分支

右击已经存在的SVN项目->merge->merge a range of revisions->URL to merge from选择需要合并的代码分支,specific range输入框选择show log选择需要合并的版本号区间,然后一路next完成合并,如果有冲突解决完代码冲突,需要svn commit才能完成合并.

4.删除分支

右击已经存在的SVN项目->repo browser,弹出框的左边选择需要删除的分支右击->delete*

上一篇下一篇

猜你喜欢

热点阅读