SVN安装及基本操作_疆~的博客-程序员宅基地

技术标签: SVN  

目录

1.SVN是什么

版本控制是什么?

为什么要使用SVN?

2.Svn服务端和客户端获取方式

服务端:https://www.visualsvn.com/server/download/

客户端:https://tortoisesvn.net/downloads.html

3.svn工作流程和架构图;

3.1 svn工作方式:

3.2 svn架构图:

4.操作svn服务器的2种方式

  4.1  command-line 命令行方式;

  4.2  GUI-client图形界面方式;

          4.2.1 svn服务连接方式:

         4.2.2 svn数据存储方式:

5.svn服务器目录结构、用户和权限;

 5.1 目录结构:

 5.2 创建仓库:

 5.3 创建用户:每个开发人员都需要拥有自己的svn账号;

 5.4 创建组:为每个部门配置不同的权限,便于管理;

 5.5 分配权限:在仓库或者目录中为用户/组分配权限;

6.svn常用操作:

    6.1 checkout 检出:

    6.2 add 新增:

    6.3 update 更新:

    6.4 delete 删除:

    6.5 revert 回滚:

    6.6 代码冲突:

7.其他操作:

    7.1   按照版本检出;

    7.2   账号保存与注销;

    7.3   代码对比工具;

    7.4   下载指定版本号的文件;


1.SVN是什么

svn是Subversion的简称,是一个开源的代码版本控制系统,svn就是用于多人共同开发同一个项目,达到资源共用目的工具。

版本控制是什么?

版本控制(Revision control)是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。可记录每个版本的信息,方便问题追踪。同时版本控制还支持并行开发,可有效的提高开发效率。

为什么要使用SVN?

  1. 项目备份方便,节省硬盘空间;
  2. 记录每个版本,方便追溯历史纪录。
  3. 多人协作开发,共享数据;
  4. 细节化的权限控制,便于管理员掌控项目整体。

2.Svn服务端和客户端获取方式

服务端:https://www.visualsvn.com/server/download/

客户端:https://tortoisesvn.net/downloads.html

安装完后,在任意一个文件夹下面右键,如果出现下面这个,就说明安装成功了

 

3.svn工作流程和架构图;

3.1 svn工作方式:

                                                                                 (svn工作流程图)

3.2 svn架构图:

                                                           (svn架构图)

4.操作svn服务器的2种方式

  4.1  command-line 命令行方式;

  4.2  GUI-client图形界面方式;

          4.2.1 svn服务连接方式:

                   (1) internet网络连接:

                                    apache服务器;

                                    svn服务器;

                  (2) local 本地连接:

         4.2.2 svn数据存储方式:

                           文件方式:FSFS(推荐使用)

                           数据库方式:BerkeleyDB(伯克利DB)

5.svn服务器目录结构、用户和权限;

 5.1 目录结构:

                Repositories 仓库:存放被svn管理的项目文件,可以存放源码,文档等;

                Users 用户:创建和编辑用户;

                Groups 权限组:创建和编辑用户组;

打开VisualAVN Server步骤:在SVN服务器的安装目录下进入bin文件夹,双击VisualAVN Server.msc即可弹出VisualAVN Server窗口。

 5.2 创建仓库:

    标准文件夹结构:

         branches 分支:如果需要测试新技术,或者大范围修改,将主干代码拷贝到分支中进行,测试无误后可以合并到主干中;

         tags 发布:发布版本要放到tags中;

          trunk 主干:主要开发目录;jia

创建仓库,命名为helloSvn:

创建项目,命名为dev:

 5.3 创建用户:每个开发人员都需要拥有自己的svn账号;

      右键【Users】-【Create User...】,比如创建三个用户siki,lain,lijiang

 

 5.4 创建组:为每个部门配置不同的权限,便于管理;

 5.5 分配权限:在仓库或者目录中为用户/组分配权限;

右键【Group】-【Create Group...】,比如创建2个组admin,javaEE-Team

同理:创建组javaEE-Team:

此时,就可以给项目helloSVN分配权限了,右键【helloSVN】-

 

6.svn常用操作:

    6.1 checkout 检出:

初次下载 - 第一次连接svn服务器时候需要下载对应仓库的数据(如果仓库中有数据的话);

比如现在让文件夹siki连接SVN服务器,方式如下

然后siki文件夹下面就有文件了

    6.2 add 新增:

新增数据到svn服务器;

比如在trunk文件夹下面新建一个Item.java文件,将此文件添加到SVN服务器:

现在再commit到SVN服务器:

提交成功显示如下界面:

现在我们来到SVN服务器,按F5刷新,可以看到trunk目录下有了Item.java文件了!

    6.3 update 更新:

更新数据 - 检查svn服务器中的数据是否与本地的数据一致,如果不一致就下载改变/新增部分,同时不会删除本地数据

比如在另一个lijaing文件夹下面更新SVN服务器的数据,同样要先在lijiang文件夹里面右键【SVN checkout...】

现在我们去siki/dev/trunk目录中打开Item.java,会发现还没有name属性

此时我们右键【update】更新一下就可以了,就会有name属性了

    6.4 delete 删除:

删除svn的数据(需要搭配commit命令);

比如删除siki/dev/trunk目录下的Item.java文件,选中【Item.java】-【TortoiseSVN】-【Delete】,然后还没完,一定要记得commit!!!

    6.5 revert 回滚:

将指定版本的代码回滚到本地,如要提交到服务器需要搭配commit命令;

然后可以看到Item.java已经被回滚到文件夹里了,同样此时一定要记得commit!!!

commit提交:

    6.6 代码冲突:

在多人同时开发一个类,提交的时候容易出现代码冲突,也可以理解为版本冲突;

比如siki和lijiang同时修改并更新Item.java文件,siki给Item.java添加一个price属性,lijiang给Item.java添加一个num属性。siki先提交,然后lijiang再提交时就会提示是否update,选择确定update,然后lijiang/dev/trunk里面就会有四个文件,

siki给Item.java增加price属性:

lijiang给Item.java增加num属性:

 

7.其他操作:

    7.1   按照版本检出;

右键【TortoiseSVN】-【show log】

选择保存地址即可

    7.2   账号保存与注销;

在需要注销账号的文件夹里面右键【TortoiseSVN】-【settings】-【Saved Data】-【Clear all】,

    7.3   代码对比工具;

可以高亮显示不同版本文件的不同之处

    7.4   下载指定版本号的文件;

比如新来一个队友,要使用某个文件的旧版本

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40323256/article/details/90766301

智能推荐

Android进阶 -- 知乎Matisse源码解析(四)_albumloader-程序员宅基地

本篇博客一起来看Matisse的数据加载机制。一、AlbumLoaderMatisse采用Loader机制进行加载,先来看AlbumLoader。AlbumLoader集成自CursorLoader,作为资源加载器,加载好资源之后,通过AlbumCollection实现的LoaderManager.LoaderCallbacks接口,将包含数据的Cursor回调给外部调用的MatissAc..._albumloader

PyMongo使用入门(六)-程序员宅基地

高可用和读写分离import pymongofrom pprint import pprintfrom pymongo import ReadPreferencefrom pymongo.errors import BulkWriteErrorfrom pymongo import MongoClient"""Mongodb执行mkdir -p /data/db0 /data/db1 /

Delphi中“流”的利用-EXE加密|电子贺卡-程序员宅基地

一、Delphi中流的基本概念及函数声明 在Delphi中,所有流对象的基类为TStream类,其中定义了所有流的共同属性和方法。 TStream类中定义的属性介绍如下: 1、Size:此属性以字节返回流中数据大小。 2、Position:此属性控制流中存取指针的位置。 Tstream中定义的虚方法有四个: 1、Read:此方法实现将数据从流中读出。函数原形为:

c语言程序 电子钢琴按键,基于51单片机8按键电子琴-简易版系统设计(原理图+程序仿真+论文)...-程序员宅基地

一、 引言单片机因其体积小,功能强,价格低廉而得到广泛应用,同时随着我国经济的飞速发展,单片机在越来越多的领域得到了广泛的应用,现在国内的单片机多用于电话,玩具和LCD等产品,预计在未来,利用单片机发明的产品会越来越多,作为一名应用电子的应届毕业生来说,理解和掌握单片机的工作原理和使用技巧是必备的技能,基于这种考虑,我这次毕业设计的题目为声光电子琴。钢琴,自从它发明的那天起,就成为人类的朋友,有的..._基于51单片机8键电子琴设计

局域网网盘 构建局域网网盘(校园云盘,育网云盘,私有云盘)-程序员宅基地

在局域网里,你可以不需要带U盘了,你只要登录自己的服务器,制作成自己的网盘。很简单很实用,分享一下 。_局域网网盘

详解SpringBoot中的JSON-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ...

随便推点

module_init_module_init()里面填多少-程序员宅基地

在Linux底下写过driver模块的对这个宏一定不会陌生。module_init宏在MODULE宏有没有定义的情况下展开的内容是不同的,如果这个宏没有定义,基本上表明阁下的模块是要编译进内核的(obj-y)。1.在MODULE没有定义这种情况下,module_init定义如下:#define module_init(x) __initcall(x);因为#define __ini_module_init()里面填多少

jquery serialize 编码 php,jquery serialize方法中文乱码及解决办法_丁一男DNGMAN的博客-程序员宅基地

jquery form表单.serialize()序列化后中文乱码问题原因及解决第一种方法:序列化中文时之所以乱码是因为.serialize()调用了encodeURLComponent方法将数据编码了解决方法就是进行解码原因:.serialize()自动调用了encodeURIComponent方法将数据编码了解决方法:调用decodeURIComponent(XXX,true);将数据解码例如..._serialize() 编码

从IT行业发展史看下一个风口在哪里?-程序员宅基地

IT行业发展史的四个时代是包容不是取代回顾一下整个IT行业发展的历史,通过分析历史,我们去预演一下未来。第一个时代叫硬件时代,在中国1980年到1990年是硬件时代的开始阶段。第二个时代是从1990年到2000年,这是软件时代,软件的爆炸式发展时代是在1990年以后,在中国比较明显的标志是1995年。第三个时代是从2000年开始的互联网时代。虽然互联网从2000年开始破灭以后,2002

判断43是不是质数用c语言,1是素数吗(c语言判断一个数为素数)-程序员宅基地

1不是素数,最小的质数是2。原因如下:素数又称质数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以.质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是.质数是一个大于1的自然数,除了1和它本身外,不能整除以其他自然数,最小的质数是2,1不是..._在c语言中1是素数吗

SDAU练习三总结-程序员宅基地

动态规划程序设计是对解最优化问题的一种途径,是解决多阶段决策问题的一种方法。在每一个阶段都需作出决策,并影响到下一个阶段的决策。多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解 题方法,而不存在一种万能的动态

Python(四)逻辑运算符 + 短路逻辑 + 三元表达式_验证逻辑短路的四种情况python-程序员宅基地

and:布尔"与" - 如果 x 为 False,x and y 返回False,否则它返回 y 的计算值。or:布尔"或" - 如果 x 是 True,它返回 True,否则它返回 y 的计算值。not:布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。例子:stu = Trueif not stu:print(“你不是学生”..._验证逻辑短路的四种情况python