精华内容
下载资源
问答
  • 版本控制

    千次阅读 多人点赞 2019-09-26 15:57:15
    什么是版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制版本控制的作用 有了它你就可以将某个文件回溯到之前的...

    什么是版本控制

    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。

    版本控制的作用

    有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。

    版本控制系统分类

    本地版本控制系统

    许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖文件。

    为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。下图来源于Git官网。

    本地版本控制系统

    集中式版本控制系统

    接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。

    集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。下图来源于Git官网。

    集中式版本控制系统

    这么做虽然解决了本地版本控制系统无法让在不同系统上的开发者协同工作的诟病,但也还是存在下面的问题:

    单点故障:中央服务器宕机,则其他人无法使用;如果中心数据库磁盘损坏没有进行备份,你将丢失所有数据。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

    必须联网才能工作:受网络状况、带宽影响。

    分布式版本控制系统

    于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 Git 就是一个典型的分布式版本控制系统。

    这类系统,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。下图来源于Git官网。

    分布式版本控制系统

    分布式版本控制系统可以不用联网就可以工作,因为每个人的电脑上都是完整的版本库,当你修改了某个文件后,你只需要将自己的修改推送给别人就可以了。但是,在实际使用分布式版本控制系统的时候,很少会直接进行推送修改,而是使用一台充当“中央服务器”的东西。这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

    分布式版本控制系统的优势不单是不必联网这么简单,后面我们还会看到 Git 极其强大的分支管理等功能。

    展开全文
  • 1.git版本控制 1.1版本控制 版本控制的英文名称为(Version Control System),主要有以下几个作用。 记录文件的所有历史变化 错误恢复到某个历史版本 多人协作开发编辑同一个文件 1.2主流的版本控制产品 ...

    1.git版本控制

    1.1版本控制

    版本控制的英文名称为(Version Control System),主要有以下几个作用。

    • 记录文件的所有历史变化
    • 错误恢复到某个历史版本
    • 多人协作开发编辑同一个文件

    1.2主流的版本控制产品

    名称

    模型

    并发模式

    历史模式

    变更范围

    网络协议

    原子提交性

    CVS

    Client-server

    Merge

    Changeset

    File

    Pserver,ssh

    No

    SVN

    Client-server

    3-way merge, recursive merge, octopus merge 

    Changeset and Snapshot

    Tree

    custom (svn), custom (svn) over ssh, HTTP and SSL (usingWebDAV)

    Yes

    Git

    Distributed

    Merge or lock

    Snapshot

    Tree

    custom, custom over ssh, rsync, HTTP/HTTPS, email, bundles

    Yes

    * 版本库模型(Repository model):描述了多个源码版本库副本间的关系,有客户端/服务器和分布式两种模式。在客户端/服务器模式下,每一用户通过客户端访问位于服务器的主版本库,每一客户机只需保存它所关注的文件副本,对当前工作副本(working copy)的更改只有在提交到服务器之后,其它用户才能看到对应文件的修改。而在分布式模式下,这些源码版本库副本间是对等的实体,用户的机器出了保存他们的工作副本外,还拥有本地版本库的历史信息。

    * 并发模式(Concurrency model):描述了当同时对同一工作副本/文件进行更改或编辑时,如何管理这种冲突以避免产生无意义的数据,有排它锁和合并模式。在排它锁模式下,只有发出请求并获得当前文件排它锁的用户才能对对该文件进行更改。而在合并模式下,用户可以随意编辑或更改文件,但可能随时会被通知存在冲突(两个或多个用户同时编辑同一文件),于是版本控制工具或用户需要合并更改以解决这种冲突。因此,几乎所有的分布式版本控制软件采用合并方式解决并发冲突。

    * 历史模式(History model):描述了如何在版本库中存贮文件的更改信息,有快照和改变集两种模式。在快照模式下,版本库会分别存储更改发生前后的工作副本;而在改变集模式下,版本库除了保存更改发生前的工作副本外,只保存更改发生后的改变信息。

    * 变更范围(Scope of change):描述了版本编号是针对单个文件还是整个目录树。

    * 网络协议(Network protocols):描述了多个版本库间进行同步时采用的网络协议。

    * 原子提交性(Atomic commit):描述了在提交更改时,能否保证所有更改要么全部提交或合并,要么不会发生任何改变。

     

    简而言之,各有优缺点,git要配合hub,可以避免分布式损坏。svn有权限控制,避免全被clone走。git适合纯代码,svn适合综合性文档管理,结合起来就完美。显然最大的不同在于git是分布式的。

    1.3SVN

    优点:团队协作开发,代码集中化管理。

    缺点:单点故障,必须联网工作,无法单机本地工作。

    1.4介绍

    Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了Linux的核心,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

    事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

    安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

    Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

    1.5组成结构

     

    • 工作区:用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
    • 暂存区:保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。有时候也被称作“索引”,不过一般说法还是叫暂存区域。
    • 版本库:也叫本地版本库,之所以说git 快,大部分提交都是对本地仓库而言的,不依赖网络,最后一次会推送的到远程仓库。
    • 远程仓库:可以看做是github,它是一个远程仓库,它提供web服务的 供大家方便下载、查看、提交、存储。文件的状态

    1.6文件的状态

           新建文件状态为untracked,add命令执行后状态变为staged,已存在的文件状态为unmodified,修改文件内容,文件状态变为modified,commit提交,文件状态编程unmodifed。

    1.7命令速查

    https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1498324567731&di=38c12e2cec3790708b3a2e350fe80eed&imgtype=0&src=http%3A%2F%2Fwww.114390.com%2Fupload_article%2Ffile_images%2Farticle%2F201409%2Fgit_big_jb51.jpg

    2本地命令

    2.1注册账号

    第一步:先官网注册账号:https://github.com

    第二步:下载安装文件:Git-2.12.0-64-bit.exe,一路next,安装完桌面右键菜单有下面两项,安装完成。选择Git Bash Here,进入git客户端。

     

     

    2.2配置身份信息

    提交文件时,就知道这个文件是谁提交的。出了问题,就知道谁干的!

    2.3查看配置信息

     

     

    2.4创建本地仓库

    D:\javaenv\git_repository

     

    2.5进入仓库

    Administrator@tonythink MINGW64 ~/Desktop
    $ cd d:                                #进入d盘
    Administrator@tonythink MINGW64 /d
    $ cd javaenv            
    $ mkdir git_repository          #创建目录
    $ cd git_repository             #进入目录

     

     

    2.6初始化仓库

    $ git init
    Administrator@tonythink MINGW64 /d/javaenv/git_repository (master)

    当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,是因为默认这个目录是隐藏的,要显示修改其显示隐藏文件即可,一般无需修改。

     

     

    2.7git的工作流程

    1. 克隆仓库
    2. 在工作目录中新增、修改、删除文件
    3. 暂存文件,将文件的快照放入暂存区
    4. 提交更新,把暂存区的内容提交到Git仓库中

     

    2.8提交文件

    创建hi.txt
    $ git add hi.txt                    #暂存单个文件
    $ git add ./*                       #批量暂存当前目录下所有内容
    $ git status                        #查看文件状态
    $ git commit -m "test"              #提交
    [master (root-commit) e522732] test
     1 file changed, 1 insertion(+)
     create mode 100644 hi.txt
    $ git status                        #查看文件状态

     

     

    2.9查看提交记录

    $ git log
    commit e522732d94c440fdd750368ce937ac1c40dbd2ed    #本次提交唯一标识,对于版本回退非常有用
    Author: nutony <52399178@qq.com>
    Date:   Fri Jun 2 09:39:31 2017 +0800
    
        test

     

     

    2.10比较当前文件和仓库文件

    修改hi.txt文件内容,然后和仓库中已经提交的hi.txt比较

    $ git diff hi.txt
    diff --git a/hi.txt b/hi.txt
    index 32f95c0..d7d0f3f 100644
    --- a/hi.txt
    +++ b/hi.txt
    @@ -1 +1 @@
    -hi
    \ No newline at end of file
    +<B1>Ƚϵ<B1>ǰ<CE>ļ<FE><BA>Ͳֿ<E2><CE>ļ<FE> #中文乱码
    \ No newline at end of file
    
    Administrator@tonythink MINGW64 /d/javaenv/git_repository (master)
    $ git diff hi.txt
    diff --git a/hi.txt b/hi.txt
    index 32f95c0..2b80830 100644
    --- a/hi.txt
    +++ b/hi.txt
    @@ -1 +1 @@
    -hi
    \ No newline at end of file
    +<U+FEFF>比较当前文件和仓库文件              #文件格式改为UTF-8即可
    \ No newline at end of file

     

     

    2.11add和commit的区别

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

    git的文件状态

    文件新建完状态为untracked

     

     

    2.12文件状态图

     

    展开全文
  • spring boot中restfull api版本控制

    千次阅读 2019-04-18 16:47:20
    这时候给所有接口进行版本管理就显得很重要了,比如某个添加用户的接口,由于业务发展很大,接口的字段属性变化很大,只能重新定义一个新的接口,由 /v1/user/add 变成了 /v2/user/add,这样我们就要维护两套接口的...

    1.楔子

    设计一套基于http协议的业务接口,但是随着时间变迁,业务的变化,或者我们协议本身的优化,都有可能要改变之前存在的接口。这时候给所有接口进行版本管理就显得很重要了,比如某个添加用户的接口,由于业务发展很大,接口的字段属性变化很大,只能重新定义一个新的接口,由 /v1/user/add 变成了 /v2/user/add,这样我们就要维护两套接口的逻辑,映射到代码里,就是要维护两个不同的业务方法。如何方便我们在代码层级管理各不同的版本接口?

    在实际使用api接口可能由于某种原因接口功能做了不兼容的改变,这时就需要通过在接口URL中指定版本号以达到使相同的接口支持不同的业务的目的。例如:

    2.版本控制策略

    在这里插入图片描述
    设计建议:

    • 对历史版本的API支持一定要有时间和用户限制,即老版API支持到一定时间就删除,新用户必须使用新版API,否则一个API有10个版本会让平台的维护非常痛苦。
    • API日常接口变更不可避免,但若变更太频繁,就要思考最初的需求是不是有问题,变更API版本的目的是什么,每个版本使用用户都不同等等方面的问题;
    • 如果不同版本的API仅是功能更强大了,比如原来不支持附件上传,新版本支持附件上传,这种场景的API版本变更就没意义,更合理的是单独发布一个附件上传的接口,降低功能间的耦合。
    • 在开发接口时始终要记住一点:尽量将功能的颗粒度降到最低(需求分析、模块设计阶段),不要做多功能融合的接口。
    • 尽量做到字段和功能的增加,这样就能保证版本的向下兼容。少做功能的删减。

    详见:

    3. 实现

    在SpringMVC中RequestMappingHandlerMapping是比较重要的一个角色,它决定了每个URL分发至哪个Controller。
    Spring Boot加载过程如下,所以我们可以通过自定义WebMvcRegistrationsAdapter来改写RequestMappingHandlerMapping。
    在这里插入图片描述
    通过在controller类和方法上添加注解@RequestMapping和@APIVersion,分别指定接口URL和版本号要求。DispatcherServlet的内部逻辑解析request,查找匹配的method handler。首先会查找@RequestMapping注解过的method handler是否与request匹配(检查request的path、method、header等),然后检查method handler的@ApiVersion注解的版本号是否与request url中的版本号匹配,最终选择符合条件的method handler。

    • 1.自定义版本控制的注解
    /**
     * API版本控制注解
     * Created on 2019/4/18 11:17.
     * @author caogu
     */
    @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Mapping
    public @interface ApiVersion {
        //标识版本号
        int value();
    }
    
    • 2.自定义url匹配逻辑
      当方法级别和类级别都有ApiVersion注解时,二者将进行合并(ApiVersionRequestCondition.combine)。最终将提取请求URL中版本号,与注解上定义的版本号进行比对,判断url是否符合版本要求。
    /**
     * 自定义url匹配逻辑
     * Created on 2019/4/18 14:07.
     *
     * @author caogu
     */
    public class ApiVersionCondition implements RequestCondition<ApiVersionCondition> {
        // 路径中版本的前缀, 这里用 /v[1-9]/的形式
        private final static Pattern VERSION_PREFIX_PATTERN = Pattern.compile("v(\\d+)/");
    
        //api的版本
        private int apiVersion;
    
        public ApiVersionCondition(int apiVersion) {
            this.apiVersion = apiVersion;
        }
    
        //将不同的筛选条件合并
        @Override
        public ApiVersionCondition combine(ApiVersionCondition apiVersionCondition) {
            // 采用最后定义优先原则,则方法上的定义覆盖类上面的定义
            return new ApiVersionCondition(apiVersionCondition.getApiVersion());
        }
    
    
        //根据request查找匹配到的筛选条件
        @Override
        public ApiVersionCondition getMatchingCondition(HttpServletRequest httpServletRequest) {
            //return null;
            Matcher m = VERSION_PREFIX_PATTERN.matcher(httpServletRequest.getRequestURI());
            if (m.find()) {
                Integer version = Integer.valueOf(m.group(1));
                if (version >= this.apiVersion) {
                    return this;
                }
            }
            return null;
        }
    
        //不同筛选条件比较,用于排序
        @Override
        public int compareTo(ApiVersionCondition apiVersionCondition, HttpServletRequest httpServletRequest) {
            //return 0;
            // 优先匹配最新的版本号
            return apiVersionCondition.getApiVersion() - this.apiVersion;
        }
    
        public int getApiVersion() {
            return apiVersion;
        }
    }
    
    • 3.自定义匹配的处理器
    @Configuration
    public class ApiVersionConfig extends WebMvcConfigurationSupport {
    
        //重写请求过处理的方法
        @Override
        public RequestMappingHandlerMapping requestMappingHandlerMapping() {
            RequestMappingHandlerMapping handlerMapping = new CustomRequestMappingHandlerMapping();
            handlerMapping.setOrder(0);
            return handlerMapping;
        }
    
        /**
         * 自定义匹配的处理器
         * Created on 2019/4/18 14:10.
         *
         * @author caogu
         */
        private static class CustomRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
            @Override
            protected RequestCondition<ApiVersionCondition> getCustomTypeCondition(Class<?> handlerType) {
                ApiVersion apiVersion = AnnotationUtils.findAnnotation(handlerType, ApiVersion.class);
                return createCondition(apiVersion);
            }
    
            @Override
            protected RequestCondition<ApiVersionCondition> getCustomMethodCondition(Method method) {
                ApiVersion apiVersion = AnnotationUtils.findAnnotation(method, ApiVersion.class);
                return createCondition(apiVersion);
            }
    
            private RequestCondition<ApiVersionCondition> createCondition(ApiVersion apiVersion) {
                return apiVersion == null ? null : new ApiVersionCondition(apiVersion.value());
            }
        }
    }
    
    • 4.编写测试的控制器
    @RestController
    @ApiVersion(1)
    @RequestMapping("{version}/my/")
    public class ApiVersion1Controller {
    
        @RequestMapping("test")
        public String test() {
            return "OK! v1";
        }
    
    }
    
    
    @RestController
    @RequestMapping("{version}/my/")
    @ApiVersion(1)
    public class ApiVersion2Controller {
    
        @RequestMapping("test")
        @ApiVersion(2)// 方法会覆盖类的版本
        public String test() {
            return "OK! v2";
        }
    
    }
    
    • 5.测试结果
      在这里插入图片描述
      在这里插入图片描述在这里插入图片描述
      在这里插入图片描述
      首先会找匹配版本的接口,如果没有则使用比自己请求版本号小 的最大服务版本号。

    4. 其他实现思路

    思路:用户请求url —> 拦截器拦截 —> 转发到真正处理类和方法 —> 返回结果

    5. 参考文献

    展开全文
  • Git版本控制管理(第2版) 中文版 仅1 4 21章 不全。本书不但讲解了如何使用 Git,而且更进一步地剖析了 Git 是怎么做到的。
  • SVN版本控制介绍与使用(超详细版)

    千次阅读 多人点赞 2020-10-11 22:21:21
    1、为什么需要SVN版本控制软件 协作开发 远程开发 版本回退 2、解决之道 SCM : 软件配置管理 所谓的软件配置管理实际就是对软件源代码进行控制与管理 CVS: 元老级产品 VSS : 入门级产品 ClearCase ...

    Table of Contents

    一、SVN概述

    1、为什么需要SVN版本控制软件

    2、解决之道

    3、什么是SVN

    4、获取SVN软件

    二、SVN软件安装

    1、SVN工作流程

    2、服务端的安装过程

    三、SVN服务端配置

    1、创建一个项目

    2、进行服务端监管

    3、权限控制

    四、SVN客户端软件安装与使用

    1、获取软件安装包

    2、确认操作系统位数

    3、客户端软件安装步骤

    4、使用客户端软件连接SVN服务器

    五、SVN使用详解(1)-三大指令

    六、SVN使用详解(2)-图标集与忽略功能

    1、图标集

    2、忽略功能

    七、SVN使用详解(3)-版本回退

    1、什么是版本回退

    2、演示SVN版本回退功能

    八、SVN使用详解(4)-版本冲突

    1、什么是版本冲突

    2、模拟版本冲突

    3、解决之道

    九、配置多仓库与权限控制

    1、配置多仓库

    2、权限控制

    十、SVN服务的配置与管理

    1、配置自启动服务

    十一、SVN 工作流程


    一、SVN概述

    1、为什么需要SVN版本控制软件

    • 协作开发
    • 远程开发
    • 版本回退

    2、解决之道

    SCM : 软件配置管理

    所谓的软件配置管理实际就是对软件源代码进行控制与管理

    CVS : 元老级产品

    VSS : 入门级产品

    ClearCase : IBM公司提供技术支持

    SVN : 主流产品 

    3、什么是SVN

    • SVN全称SubVersion
    • SVN是近年来崛起的版本管理工具,是CVS的接班人。目前,绝大多数软件公司都使用SVN作为代码版本管理软件
    • 特点:操作简单,入门容易;;;支持跨平台操作;;;支持版本回退功能

    4、获取SVN软件

    属于C/S结构软件(客户端与服务端)

    服务端软件:VisualSVN

    网址:https://www.visualsvn.com/downloads/

    客户端软件:Tortoisesvn

    网址:http://tortoisesvn.net/downloads

    二、SVN软件安装

    1、SVN工作流程

    2、服务端的安装过程

    根据上方地址,下载完成;

    1)第一步,Next 

    2)第二步,Next  

    3)第三步,Next  

    4)第四步,Next  

    5)第五步,Next  

    三、SVN服务端配置

    1、创建一个项目

    1)首先在SVN服务端创建一个共有目录WebApp作为项目目录

    2)在WebApp目录下创建Shop文件夹,作为Shop(版本仓库)

    3)创建版本仓库,DOS环境基本语法:

    svnadmin create Shop 文件夹路径(Shop仓库)

    如果Shop创建配置成功,那么Shop文件夹显示以下目录结构 

    2、进行服务端监管

    Apache =>http://localhost 或 (ip地址)访问到htdocs目录下相关文件(监管)

    SVN => svn://localhost 或(ip地址)访问到相关数据仓库(如Shop仓库)

    基本语法:

    svnserver -d(后台运行) -r(监管目录)版本仓库路径

    如下图所示:

    通过以上指令,我们的svn://localhost 或 ip 地址就可以直接指向 Shop 版本仓库

    3、权限控制

    默认情况下,SVN服务器是不允许匿名用户上传文件到服务器端的,所以必须更改项目的相关配置文件

    打开配置文件进行修改:更改第19行代码,去除前面的空格以及 '#'(更改其值为write)

    四、SVN客户端软件安装与使用

    1、获取软件安装包

    网址:http://tortoisesvn.net/downloads

    2、确认操作系统位数

       - 64位

    3、客户端软件安装步骤

    1)双击软件包运行(TortoiseSVN)

    一路Next

    注:在TortoiseSVN软件安装完毕之后,请一定要重启计算机,否则 SVN 图标是无法显示的!!

    如果我们鼠标右键出现如下两个图标,代表我们已经安装成功了!

    4、使用客户端软件连接SVN服务器

    (Checkout检出)

    首先在你的项目目录鼠标右键 => TortoiseSVN =>版本库浏览器 =>输入SVN服务器地址

    svn://SVN服务器地址 => 项目(仓库)

    出现.svn隐藏文件夹的话,代表检出成功(没显示的话,可能文件被隐藏,修改为显示隐藏文件,重新进行上面两步操作即可) 

    五、SVN使用详解(1)-三大指令

    1、回顾SVN三大指令

    1)(Checkout)检出操作:①链接到SVN服务器端  ②更新服务端数据到本地

    注意:Checkout 只在第一次链接时操作一次,以后如果进行更新操作请使用Update(更新指令)

    2) (commit)提交操作:①提交本地数据到服务器

    如果显示以下界面,表示提交成功

    以上工作大部分是由项目经理完成的,那么如果公司新来一个程序员(李四),他需要做哪些操作呢?

    1)检出操作,效果如下:

    2)Commit(提交),效果如下:

    以上指令通常是在模块开发完毕之后上传

    3)项目经理(Update更新操作)

    六、SVN使用详解(2)-图标集与忽略功能

    1、图标集

    1)常规图标

    含义:当客户端文件与服务器端文件完全同步时,系统显示以上图表

    2)冲突图标

    含义:当客户端文件与服务器端文件完全同步时,系统显示以上图标

    3)删除图标

    含义:当服务器数据已经删除,那么客户端该文件显示以上图标

    4)增加图标

    含义:当我们编写文件已添加到提交队列,那么系统将自动显示以上图标

    5)无版本控制图标

    含义:当我们编写的文件没有添加到上传队列时,系统将自动提示以上图标

    6)修改图标

    含义:当客户端文件有修改但未提交,此时将自动显示以上图标

    7)只读图标

    含义:当客户端文件以只读形式存在时,将自动显示以上图标

    8)锁定图标

    含义:当服务端数据已锁定,那么客户端文件将自动显示锁定图标

    9)忽略图标

    含义:客户端文件已忽略,不需要进行提交上传,那么将自动显示以上图标

    2、忽略功能

    有些文件不希望上传至svn服务器,应该将该文件或该类型的文件添加至忽略列表

    七、SVN使用详解(3)-版本回退

    1、什么是版本回退

    有些时候,软件的运行可能使开发者或使用者不满意,这时我们需要把当前版本退回到以前的某个版本。

    传统形式的存储机制与SVN存储机制的对比

    2、演示SVN版本回退功能

    1、删除需求文档

    2、在项目空白处鼠标右键,采用如下图所示操作

    3)根据日志进行回退(3版本是进行删除的操作,我们需要回退到2版本,所以点击2,然后点击OK即可)

    4)回退后效果如下

    八、SVN使用详解(4)-版本冲突

    1、什么是版本冲突

    在实际项目开发中,如果两个人同时修改某个文件就会产生版本冲突问题

    2、模拟版本冲突

    模拟以上过程出现以下错误

    3、解决之道

    1)合理分配项目开发时间

    旺财    上午开发

    小强    下午开发

    2)合理分配项目开发模块

    旺财    购物车模块

    小强    文章模块

    3)通过SVN解决版本冲突问题

    ①更新服务器端数据到本地

    index.php :  整合后的index.php文件

    index.php.mine : 小强修改后的index.php文件

    index.php.r6 : 09:00更新时的index.php(起始状态) 

    index.php.r7 :旺财修改后的index.php文件

    ② 删除除index.php以外的其他三个文件

    ③ 修改整合index.php冲突文件

    ④ 重新提交数据到 SVN 服务器端,即可解决版本冲突问题

    九、配置多仓库与权限控制

    1、配置多仓库

    在实际项目开发中,我们可能会同时开发多个项目,那么我们如何进行多项目监管呢?

    通过 svnserve 进行仓库监管,但是监管指令只能监管某一个文件夹,而不能同时监管多个仓库。

    答:可以通过监管 WebApp 总目录来达到监管所有仓库的目的

    svnserve -d(后台运行) -r(监管目录) WebApp(项目总目录)

    ①打开DOS窗口,输入以下命令 

    svn://localhost 或 ip 地址来访问 D:/svn/WebApp 目录

    如果需要访问 Shop 项目、Wechat 项目

    Shop项目:svn://localhost/Shop

    Wechat项目:svn://localhost/Wechat

    2、权限控制

    如果要使用权限控制有一个前提:必须首先开启权限功能

    在每一个仓库中都有一个 conf 文件夹,里面有三个文件

    authz 文件:授权文件

    告诉哪些用户具有哪些权限

     

    passwd 文件:认证文件

    标识当前 svn 系统中某个仓库具有哪些用户以及相应的密码

     

    默认情况下,以上两个文件都是禁用的,如需要使用,首先要开启以上两个文件

    svnserve.conf 配置文件

     

    开启步骤如下:

    ① 注释匿名用户的可读可写权限

    ② 开启认证文件与授权文件

    ③ 编写认证文件定义相关用户名与密码

    ④ 编写授权文件

    ⑤ 测试

    输入:admin     admin888 (超级管理员)即可

    十、SVN服务的配置与管理

    1、配置自启动服务

    不用每次启动都在DOS中启动了

    sc create SVNService binpath="C:\Program Files\VisualSVN Server\binsvnserve.exe --service -r D:/svnroot" start=auto

    sc create  服务名称 binpath=空格"svnserve.exe-service-r D:/svn/WebApp" start=空格 auto

    创建系统服务。服务名SVNService

    ① 打开运行,输入 cmd 指令,打开 DOS 环境(请使用超级管理员运行)

    ②输入以下指令

    ③ 查看系统服务

    控制面板 => 管理工具 => 服务

    双击运行,启动SVNService服务

    十一、SVN 工作流程

    1、SVN 工作流程

    2、钩子程序

    所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化属性的修改

    默认情况下,钩子的子目录(版本仓库/hooks/)中包含各种版本库钩子模块

    post-commit.tmpl :事务完成后所触发的钩子程序

    钩子程序默认情况可以采用批处理指令或 Shell 指令来进行编写

    3、通过批处理指令编写钩子程序

    ① 指令 svn 服务端工作目录

    设置服务器端 SVN 路径

    SET SVN="C:\Program Files\VisualSVN Server\bin\svn.exe"

    ② 指定 Web 服务器工作目录

    设置服务器项目运行目录

    SET DIR="D:\server\apache\htdocs\shop"

    ③通过 update 指令实时更新数据到 DIR 目录中

    SVN update %DIR%

    ④、具体使用步骤

    第一步:复制post-commit.tmpl为 post-commit.bat 文件

    第二步:填入相关处理指令

     

    略。。。。。。需要再更新

     

     

     

     

    展开全文
  • Git版本控制(完美整理版)

    万次阅读 多人点赞 2018-09-03 21:03:19
    版本控制Git 一.Git是什么 版本控制工具!Git是目前世界上最先进的分布式版本控制系统(没有之一)。 这个软件用起来就应该像这个样子,能记录每次文件的改动 这样,你就结束了手动管理多个...
  •  版本控制介绍(VCS)  本地版本控制系统(RCS)  集中化的版本控制系统(CVCS)Svn  分布式版本控制系统(DVCS) Git ==================================================================================...
  • Spring cloud 多版本控制及灰度发布

    千次阅读 2018-08-29 11:41:18
    在我们使用spring mvc单体架构时, 我们可以通过uri,或者请求头做多版本路由,虽然同一个功能需要维护多个版本的接口,但是对于系统而言,不会因为新增一个接口版本而影响到老用户。当我们使用spring cloud构建微...
  • 解除svn版本控制

    千次阅读 2019-01-11 16:03:27
    之前只知道将项目文件加上svn版本控制,却不知道怎么去解除svn版本控制,后来在朋友的介绍下,总结三种比较简单粗暴的方法: 一、找到svn控制的目录,将目录下的所有.svn文件全部删掉。 二、新建一个txt文件,将下列...
  • Git移除版本控制操作

    千次阅读 2019-07-31 11:20:50
    Git移除版本控制操作 第一种:直接采用客户端操作 命令:find . -name ".git" | xargs rm -Rf 第二种:采用文件夹删除,在win10中,进行隐藏文件夹删除,删除完,请隐藏文件,返回原来的设置。 操作过...
  • 以前都在一台电脑上码代码,时间久了发现代码有点混乱,于是乎,不得已,用上了版本控制版本控制这东西,说实话,入门稍显复杂。复杂的原因就在于,它确实功能很完善。好了,下面是一段结合自己理解的介绍,通篇...
  • 数据库内数据的版本控制

    千次阅读 2019-12-05 19:33:10
    版本号的设计是数据库内设计的一种常见设计方案,使用时,会对数据库中的表新增一条版本字段。 版本字段内数据的设计,一般采用两种方式,一种是使用一条自增的数据,每新增一条数据, 版本号就会加一;另一种是使用...
  • 软件版本控制流程

    千次阅读 2020-10-14 16:12:08
    主要针对软件版本的流程, 以确保公司资产得到保护。 2.适用范围 该流程适用于产品研发部门。 3.环境资源 在整个产品生命周期中,以gitlab作为公司主要代码仓库。 4.流程 流程分为版本号定义、版本发布 4.1 ...
  • APP版本控制问题

    千次阅读 2017-03-02 10:57:42
    现在很多公司APP版本不断迭代,需要兼容旧版本,有了版本控制。 升级版本,我们可以添加新接口进行支持,但是,如果改动较小,只需要传入版本号,进行版本控制。 但是当版本数量较多,老版的使用率极低,没必要做...
  • 几种常见的版本控制工具

    千次阅读 2020-12-29 19:35:49
    与SVN相关的版本控制工具? SVN: 简介:企业里用的较多 官方网站:https://tortoisesvn.net/ 官方文档:https://tortoisesvn.net/docs/release/TortoiseSVN_en/index.html 中文文档:...
  • ElasticSearch版本控制

    万次阅读 2019-03-18 19:30:25
    ElasticSearch版本控制 对人工智能感兴趣的同学,可以点击以下链接: 现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗...
  • 作为一名优秀的程序猿,怎么能不会使用版本控制工具(然而我就不会)? SVN,英文名Subversion,一款很棒的开源版本控制系统,采用分支管理的模式且拥有众多IDE支持,比如Eclipse,MyEclipse,Android Studio等等等...
  • 什么是版本控制版本控制工具?

    千次阅读 2018-08-12 12:17:24
    版本控制: 是一种思想,因为每一个问题不可能在一次解决中找到完美的答案,即写项目的时候不可能做到一次性把代码写的不需要后期修改那样子优雅和完善,所以就需要对每一次自己思路和代码进行保留(而每一次提交或...
  • 实用的API版本控制方法

    千次阅读 2017-06-16 09:32:43
    译者注:本文主要描述了几种API版本控制的方法。用户可以查询原始的API,或者添加定制的头文件来接收特定的版本。如果应用程序收到一个重大修订,将URI修改为V2。在进行迭代改进时,将创建与更改日期相一致的端点,...
  • Dubbo多版本控制

    千次阅读 2019-07-30 00:41:52
    当系统进行升级时,一般都是采用“灰度发布(又称为金丝雀发布)”...多版本控制就是实现灰度发布的 一、创建提供者04-provider-version (1) 创建工程 创建Maven的工程。 (2) 导入依赖 Spring的版本为4....
  • 软件开发&测试版本控制说明

    千次阅读 2018-05-11 09:33:34
    1.引入版本控制的原因 错误观念:软件测试不需要版本控制。 测试过程中发现的bug提交给开发人员,开发人员在对提交的bug进行修改,bug修改后开发人员会将修改后的代码放入当前的软件版本之中,导致软件测试版本...
  • SVN版本控制工具详解,基本操作,使用

    万次阅读 多人点赞 2018-11-05 09:49:27
    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。 二、SVN的下载安装 下载地址:https://tortoisesvn.net/downloads.zh.html 安装完...
  • 常用的版本控制工具对比

    万次阅读 2017-06-07 19:15:12
    项目源代码的版本管理工具中,比较常用的主要有:CVS、SVN、Git 和 Mercurial (其中,关于SVN,请参见我先前的博客:SVN常用命令 和 SVN服务器配置) 目前Google Code支持SVN、Git、Mercurial三种方式,例如:...
  • IntelliJ IDEA 版本控制的使用

    千次阅读 2018-01-14 18:02:58
    版本控制的使用 IntelliJ IDEA 下的版本控制介绍 很多人认为 IntelliJ IDEA 自带了 SVN 或是 Git 等版本控制工具,认为只要安装了 IntelliJ IDEA 就可以完全使用版本控制应有的功能。这完全是一种错误的...
  • 实际使用过程中,可能需要同时提供多个不同类型的模型,以及模型的不同版本,因此本文对该方法的实现做一介绍 系列文章目录 (一)TensorFlow Serving系列之安装及调用方法 (二)TensorFlow Serving系列之导出...
  • SpringBoot实现接口版本控制

    千次阅读 2019-05-13 16:47:58
    一个系统在上线后会不断迭代更新,需求也会不断变化,有可能接口的参数也会发生变化,如果在原有的参数上直接修改,可能会影响到现有项目的正常运行,这时我们就需要设置不同的版本,这样即使参数发生变化,由于老...
  •   SVN是一套自由/开源的版本管理控制系统,主要用于文档、代码的管理控制,本文档将讲解在Linux系统下如何进行SVN服务器搭建,本次演示使用为云服务器进行演示,快来一起看看吧~~    二、安装 setp1:进入云...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,618,814
精华内容 647,525
关键字:

版本控制