1 svn介绍

都已经用了git,为什么还要介绍svn呢?为了让aicoder.com的学员能够掌握多种的源代码管理工具的使用方法,更快的融入到项目开发中,特整理此文档。

1.1 项目管理中的版本控制问题

通常软件开发由多人协作开发,如果对代码文件、配置文件、文档等没有进行版本控制,将会出现很多问题:

  • 备份多个版本,占用磁盘空间大
  • 解决代码冲突困难
  • 容易引发BUG
  • 难于追溯问题代码的修改人和修改时间
  • 难于恢复至以前正确版本
  • 无法进行权限控制
  • 项目版本发布困难

1.2 什么是版本控制

版本控制(Revision control)是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。

1.3 svn是什么?

SVN(Subversion)是一个开源的版本管理工具。

svn是基于客户/服务器模式:

 
image

复制-修改-合并方案(Subversion默认的模式):

在这种模型里,每一个客户读取项目配置库建立一个私有工作副本——版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。

锁定-修改-解锁方案:

在这样的模型里,在一个时间段里配置库的一个文件只允许被一个人修改。 此模式不适合软件开发这种工作。

2 svn服务端安装配置

2.1 linux(centos7)下搭建svn服务器端

  1. 从普通用户模式进入管理员模式
su
  1. 安装svn
yum install subversion -y

检验是否安装上了

svnser --version
#(注意是两个 - )
  1. 创建仓库所在文件夹
mkdir /home/svndata/objects

在该文件夹下创建版本库

svnadmin create /home/svndata/objects
  1. 配置SVN

找到SVN配置文件夹

cd /home/svndata/hgd/conf/

成功进入后,输入命令 ls 可以看到该目录下的文件:authz passwd svnserve.conf

  • 配置svnserve.conf
vim svnserve.conf

进入文件后 按i进行编辑,将下列代码前的#和空格删去,直至顶格

anon-access=none
auth-access=write
password-db=password
realm=/home/svndata/objects #该路径为仓库路径

编辑结束后 按esc退出修改模式 后再输入:wq,即保存退出

  • 配置passwd
vim passwd

密码文件内容如下:

[user]
username = password

格式:用户名=密码

修改后同上保存退出

  • 配置authz
vim authz

权限有三种:rw(读写)r(只读)w(只能写)

[group]
用户组=成员1,成员2.。。。。
[/]#总权限
@用户组 = 权限
[objects:/]#下级子仓库权限
@用户组 = 权限
  • 关闭防火墙
systemtcl stop firewalld.service

关闭开机启动

systemctl disable firewalld.service

查看防火墙状态

firewall-cmd --state

出现not running就表示关闭成功了

  1. 启动SVN
svnserve -d -r /home/svndata/objects

至此svn就可以用了

  1. 配置SVN的钩子
    进入服务器端仓库的目录,会有hooks目录。
 
hooks目录

对应修改post-commit文件就是当有提交的时候自动执行的钩子。

例如:

REPOS="$1"
REV="$2"
#DIRS=$(svnlook dirs-changed $REPOS)
#echo $DIRS | grep -c trunk
#touch /usr/local/webserver/nginx/html/index.txt
/usr/bin/svn up --force /home/svndata/scratchFile/hgd/branches/dev --username "admin" --password "xxxxxxxx"
cd /usr/local/webserver/nginx/html
rm -rf ./*
cd /home/svndata/scratchFile/hgd/branches/dev
npm i
gulp dist
cp -R /home/svndata/scratchFile/hgd/branches/dev/dist/* /usr/local/webserver/nginx/html
exit 0

3 TortoiseSVN客户端

3.1 svn客户端类型

svn客户端需要通过网络访问svn服务端提交文件、查询文件等,可通过以下客户端类型访问svn服务端:

1、使用Subversion提供的客户端命令

使用方式:在命令行下输入命令操作。

2、使用Torotise图形化界面操作(推荐)

3、使用开发工具插件操作(推荐)

3.2 下载安装

TortoiseSVN是Subversion版本控制系统的一个免费开源客户端,不需要为使用它而付费。

TortoiseSVN是 Subversion 的 Windows 扩展。它使你避免接触 Subversion 枯燥而且不方便的 Command Line。它完全嵌入 Windows Explorer,使用时只需在正常的窗口里右键操作就可以了

 
image

下载地址:https://tortoisesvn.net/downloads.html, 页面里有语言包补丁的下载链接。

目前最新版为 1.11.0 下载地址: https://osdn.net/projects/tortoisesvn/storage/1.11.0/

 

在语言补丁包中我们可以找到中文的补丁并下载下来:

 
image

运行下载的 TortoiseSVN 安装程序

 
image

运行下载的 TortoiseSVN 中文语言包

 
image

3.3 修改默认语言

修改 TortoiseSVN 默认语言

TortoiseSVN 安装完后默认的界面是英文的,我们可以通过设置修改成已安装语言

 

3.4 浏览仓库

使用Tortoise浏览svn服务端的仓库的内容:

 
image
 
image
 
image

4 关于工作上手

进入公司后,第一步就是要获取公司的源码快速上手项目。

4.1 获取用户名和仓库地址

可以找老大要一下仓库的地址,并让代码管理员帮忙创建仓库的账号和密码。

5 TortoiseSVN日常使用

5.1 浏览仓库

Repo-browser : 浏览仓库中资源信息

 

5.2 导入导出

Export :导出项目 ,和checkout区别 (checkout检出后文件,含有.svn隐藏文件夹, 会和SVN仓库交互, export导出,没有.svn隐藏文件夹)

 
image

import 将本地资源导入到svn 服务器

 
image

5.3 修改提交

 
image

5.3.1 Checkout

检出项目,复制项目的副本到本地。

在要检出的目录中右键:

 
image
 
image

5.3.2 add

在检出的目录中添加文件:

 
image

图标: 这是一个新文件

n Add to ignore list :添加到忽略列表 (标记该文件不需要版本控制 )

 
image

n Add : 标记这个文件添加到服务器

 
image

已经标记要添加到版本库

5.3.3 Commit

当检出目录或子目录中内容有修改,目录图标变为:

提交Commit 提交本地修改至svn服务器:

在检出目录或要提交修改的目录右键:

 
 
 

提交后目录中的内容与svn服务同步,目录图标变为:

 

5.3.4 update

更新仓库的文件到本地

在检出目录或子目标或文件上右键:

 

5.3.4.1 更新到最新版本

 

5.3.4.2 更新到指定版本

 
 

5.3.5 Delete

Delete :删除版本库文件

标记删除后,本地文件删除,标记删除后需要提交。

 

5.3.6 恢复

在检出目录或子目录操作会记录操作日志,提交前可以回滚操作。

在要回滚的检出目录或子目录中右键:

 
 

5.4 冲突处理

两个客户端同时修改同一个文件, 改动同一个位置,发生冲突情况

     如果当commit 遇到文件已经过时,说明另一个人可能改动过 ----- update
 
     db.properties 将本地和服务器合并到一起的文件 (不要直接看)

     db.properties.mine 我本地自己修改后的文件

     db.properties.r16 我修改之前的文件

     db.properties.r17 别人修改后的文件
 

手动Merge 后,需要将编辑后冲突文件,标记为已经解决 , 再进行commit

 

6. 分支管理

6.1 合并动作 merge

假如我们在 branch 分支中对文件进行了修改或增加了文件,要 merge 回 trunk 目录中,方法很简单。以上面的例子来说,我们在 D:\runoob01\trunk目录空白处,按下鼠标右键,选择 Merge(合并):

 

这个画面主要分为三个部份,前面的 From: 与 To: 是要问您打算从 Branch 中的哪个版本到哪个版本,merge 回原来的 trunk 目录中。因此,From 跟 To 的 URL 字段应当都是指定原来 branch 的目录下。剩下的就是指定要 merge 的 revision 范围。以上面的例子而言,我们从 Branch 的 Revision 7 开始 merge 到 Branch 下面的最新版本。您可以透过,Dry run 按钮,试作一次 Merge。这个 merge 只会显示一些讯息,不会真正的更新到 trunk 的目录去。只有按下 Merge 按钮后,才会真正的将 branch 的档案与 trunk 的档案合并起来。

 

如果您确认这次的 merge 没有问题,您可以直接使用 commit 来将这两个被修改的档案 commit 回 SVN repository 上。如果有问题,您可以直接修改这两个档案,直到确认 ok 了,再行 commit。


6.2 制作 Tag 或是 Release

所谓的 Tag 或是 Release 就是一个特别的版本,因为这个版本可能有特别的意义。例如:这个版本是特别的 Milestone 或是 release 给客户的版本。其实,Tag 与 Release 的作法与 Branch 完全相同。只是 Branch 可能会需要 merge 回原来的 trunk 中,而 tag 及 release 大部分都不需要 merge 回 trunk 中。

举例来说,今天我们的 trunk 做了一版,这个版本被认定是软件的 1.0 版。 1.0版对于开发来说是一个非常重要的里程碑。所以我们要特别为他做一个标记,亦即 Tag。假设,这个 1.0 版是要正式 release 给客户或是相关 vendor,我们要可以为他做一个 Release 的标记。基本上,SVN 只有目录的概念,并没有什么 Tag 的用法。所以您会看到在 SVN 的选单上面,Branch 与 Tag 是同一个项目。以这个 1.0 的例子来说,我们在 runoob01 目录下创建 tags 目录用于存放打 tag 的版本,并提交到版本库,然后在 Trunk 上面,按下鼠标右键,选择 Branch/Tag 的项目:

 
 

成功的话,您就在对应的 Tag 目录下面建立了一个 v1.0 的目录。当然,如果您这时到 Tag 的目录下面去,会看不到这个目录,您需要在 Tag 目录下面 update 一下,才能看到它。

 

6.3分支工作流管理

参考老马的git分支管理教程:https://ke.qq.com/course/368468?tuin=1eb4a0a4

7. svn注意事项

  1. 每次操作必须要有cmmit的消息
  2. 所有的提交之前必须经过严格测试,而且必须先获取最新,然后解决冲突后再提交。
  3. 下班的时候要提交一次代码(即使没有完成的代码,最好注释掉不能编译通过的部分,也要提交一次)
  4. 更新的公共代码后,通知一下小伙伴,一起update一下
  5. commit的消息遵守公司的规范,最好严格按照规范走
  6. 公共文件最好获取lock后再修改,然后尽快释放lock
  7. 提交频率最好是一个功能完成后,测试没有问题大了,就立即提交。

参考

  1. AICODER官网地址:https://www.aicoder.com/

aicoder实习svn内部培训教程的更多相关文章

  1. 公司内部培训AlwaysOn PPT分享

    公司内部培训AlwaysOn PPT分享 下载地址: http://files.cnblogs.com/files/lyhabc/alwayson.ppt

  2. 公司内部培训SQL Server传统索引结构PPT分享

    公司内部培训SQL Server传统索引结构PPT分享 下载地址 http://files.cnblogs.com/files/lyhabc/SQLServer%E4%BC%A0%E7%BB%9F%E ...

  3. 通达OA 小飞鱼工作流在线培训教程文件夹及意见征集

    最近通达OA技术交流群有不少朋友反映说表单设计这块 改动样式的问题,这块须要html和css的改动.本来最近正好要在工作流这块准备做一个系列的课程,都是基础的设置主要是给刚接触工作流的朋友用的,大家有 ...

  4. SOA体系结构基础培训教程-规范标准篇

    引子:本文是<SOA体系结构基础培训教程>第3章<SOA标准与规范>课件,版权所有,转载请注明出处. 随着SOA在业界的应用日益广泛,SOA的标准化问题也成为各界日益关注的焦点 ...

  5. SOA体系结构基础培训教程

    SOA体系结构基础培训教程-规范标准篇 引子:本文是<SOA体系结构基础培训教程>第3章<SOA标准与规范>课件,版权所有,转载请注明出处. 随着SOA在业界的应用日益广泛,S ...

  6. HTML 培训教程

                                                                  HTML培训教程 1. HTML概述 1.1. 什么是 HTML 文件? n ...

  7. Linux视频培训教程

    很详尽的Linux培训教程,既包含日常工作常常要用到的实践及技巧,又包含Linux认证及系统管理及架构,讲的很不错.最关键的.这么具体,完整的教程还是免费的.花了点时间拿它整理了下. 第一部分: Li ...

  8. 搭建SVN服务器详细教程

    搭建SVN服务器详细教程 本教程会从最基本的下载安装到上传代码,下载代码这条线来详细讲述如何完成SVN服务器的搭建 下载并安装VisualSVN server 下载并安装TortoiseSVN 导入项 ...

  9. SVN入门图解教程(超详细)

    SVN入门图解教程(超详细) 一.总结 一句话总结: 二.SVN入门教程 1. 什么是SVN SVN全名Subversion,即版本控制系统.SVN与CVS一样,是一个跨平台的软件,支持大多数常见的操 ...

随机推荐

  1. 【题解】Informacije [COCI2012]

    [题解]Informacije [COCI2012] 传送门:官方题面 [题目描述] 有一个长度为 \(n\) 的 序列 \(a\)(由 \([1,n]\) 中的数组成,且每个数只会出现一次),现给出 ...

  2. ASP.NET MVC 中枚举生成下拉框

    最近公司在开发财务系统,在工作中遇到不少的地方需要下拉框. 但是枚举框中数据的内容又来自枚举. 枚举代码如下: public class EnumDemo { public enum Value { ...

  3. 从VisualStudio资源文件看.NET资源处理

    c# 工程里面,经常会添加资源文件. 作用: 一处文本多个地方的UI使用,最好把文本抽成资源,多处调用使用一处资源. 多语言版本支持,一份代码支持多国语言.配置多国语言的资源文件,调用处引用资源. 例 ...

  4. 百度地图分布图(百度地图api司机位置实时定位分布图)

    就类似于我们使用共享单车app的时候,可以看到我们周围的空闲单车分布.e代驾在后台管理系统需求里也有此功能,目的是为了实时看到目标城市下的所有司机状态. 一.controller //controll ...

  5. vue-组件化开发基础

    组件化开发基础.分为三个步骤: 创建组件构造器对象 注册组件 使用组件 <!DOCTYPE html> <html lang="en"> <head& ...

  6. Struts2 OGNL表达式、ValueStack

    OGNL简介 OGNL,即Object-Graph Navigation Language,对象视图导航语言,是一种数据访问语言,比EL表达式更加强大: EL只能从11个内置对象中取值,且只能获取属性 ...

  7. Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识

    摘要: 详解原型污染. 原文:Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识 作者:Lucas HC Fundebug经授权转载,版权归原作者所有. 可能有信息敏感的同学已 ...

  8. centos6.8下hadoop3.1.1完全分布式安装指南

    前述:这篇文档是建立在三台虚拟机相互ping通,防火墙关闭,hosts文件修改,SSH 免密码登录,主机名修改等的基础上开始的. 一.传入文件 1.创建安装目录 mkdir /usr/local/so ...

  9. 通过优化Gunicorn配置获得更好的性能

    对于受CPU限制的应用程序,增加了工作程序和/或内核.对于受I / O限制的应用程序,请使用"伪线程". Gunicorn是Python WSGI HTTP Server,通常驻留 ...

  10. CVE-2019-0708漏洞利用复现

    CVE-2019-0708漏洞利用复现 距离这个漏洞爆出来也有好几个月了,之前一直忙也没来得及写文档,现在重新做一遍. 准备环境: win7靶机 IP地址:172.16.15.118 Kali攻击机 ...