svn关键词BASE, HEAD, COMMITTED, PREV可以很方便用于日常操作中,但是很多人对他们的工作原理和方式不是太了解。
在这里我将使用用例,诠释他们的作用和意图。
先给出svn手册中对他的解释:
 "HEAD"       latest in repository
 "BASE"       base rev of item's working copy
 "COMMITTED"  last commit at or before BASE
 "PREV"       revision just before COMMITTED
 
HEAD表示在版本库中最新的版本,记住一定是版本库,而不是某个working-copy, 另外需要注意的是,这里提到版本库是指对应working-copy的那个分支或主干。
COMMITTED表示在working-copy中最近的一次提交版本。
PREV表示在working-copy中最近的倒数第二次提交版本,也就是COMMITTED - 1。
前面3个概念都是比较好理解的。
最后一个BASE有点不好理解,先给出例子,最后结论BASE的含义
 
  -bash-2.05b$ svn co http://svn.corp/.../proxyio/
A    proxylog/proxyio.procinfo
A    proxylog/pi.cpp
A    proxylog/Makefile
A    proxylog/run.sh
Checked out revision 134057. -bash-2.05b$ svn st -v
           134057   134034 deyi.long    .
           134057   102502 deyi.long    proxyio.procinfo
           134057   134034 deyi.long    pi.cpp
           134057   102674 deyi.long    Makefile
           134057   114428 deyi.long    run.sh
备注:第一列表示BASE, 第二列表示COMMITTED 可以看出checkout一个working-copy后,svn会给这个working-copy分一个新的、统一的BASE版本号(如 134057)。
接下来可以修改pi.cpp代码,然后checkin,你就会发现这个文件的BASE和COMMITTED会同时增加,并且相等。如下
  -bash-2.05b$ svn st -v
           134057   134034 deyi.long    .
           134057   102502 deyi.long    proxyio.procinfo
           134058   134058 deyi.long    pi.cpp
           134057   102674 deyi.long    Makefile
           134057   114428 deyi.long    run.sh 接下来在此目录下执行update动作,你就会发现所有文件的BASE都进行了升级,但是COMMITTED没有改变,如下
  -bash-2.05b$ svn up
At revision 134058. -bash-2.05b$ svn st -v
           134058   134034 deyi.long    .
           134058   102502 deyi.long    proxyio.procinfo
           134058   134058 deyi.long    pi.cpp
           134058   102674 deyi.long    Makefile
           134058   114428 deyi.long    run.sh 通过上述用例,可以看出BASE表示在working-copy中每个文件基准版本,会经常变动,并且有统一working-copy的版本的意图。另外,也说明对每个文件来说,BASE就是COMMITTED的别名,但是它可以和其他文件BASE保持一致,用于统一,批量处理。
 
 
root@DESKTOP-I4OIMJC /cygdrive/e/html/pim/php_aspire-www/heonline/lib
# svn up Curl.class.php
Updating 'Curl.class.php':
At revision 21990. # svn st -v Curl.class.php
M            21990    21990 liuchao_c    Curl.class.php root@DESKTOP-I4OIMJC /cygdrive/e/html/pim/php_aspire-www/heonline/lib
# svn st -v Log.class.php
             21989    21954 liuchao_c    Log.class.php
   
root@DESKTOP-I4OIMJC /cygdrive/e/html/pim/php_aspire-www/heonline/lib
# svn up
Updating '.':
At revision 21990. root@DESKTOP-I4OIMJC /cygdrive/e/html/pim/php_aspire-www/heonline/lib
# svn st -v Log.class.php
             21990    21954 liuchao_c    Log.class.php
 
BASE COMMITTED

svn关键词BASE, HEAD, COMMITTED, PREV的深入理解的更多相关文章

  1. 封装常用的js(Base.js)——【01】理解库,获取节点,连缀,

    封装常用的js(Base.js)——[01]理解库,获取节点,连缀,  youjobit07 2014-10-10 15:32:59 前言:       现如今有太多优秀的开源javascript库, ...

  2. 解决svn问题:Wrong committed revision number: -1

    参考:http://my.oschina.net/luckyi/blog/291007

  3. svn笔记3

    如果你是从头到尾按章节阅读本书,你一定已经具备了使用Subversion客户端执行大多数不同的版本控制操作足够的知识,你理解了怎样从Subversion版本库取出一个工作拷贝,你已经熟悉了通过svn ...

  4. C++ 中的virtual关键词

    C++ 中的virtual关键词 动态绑定 所谓动态绑定,我的理解就是一个函数在调用之前无法得知参数的具体类型(基类还是派生类).C++ Primer上描述了两种动态绑定的情况: 要触发动态绑定,必须 ...

  5. Python 一键上传下载&一键提交文件到SVN入基线工具

    一键上传下载&一键提交文件到SVN入基线工具   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用说明 1   注: 根据我司项目规则订制的一套工具,集成以下功能,源码 ...

  6. Centos下SVN环境部署记录

    大多数情况下,我们日常工作中用的版本控制系统都会选择分布式的Git,它相比于集中式的SVN有很多优势.但是有些项目软件基于自身限制,可能只支持SVN做工程同步.废话就不多说了,下面记录下SVN的部署和 ...

  7. centos7 安装svn, 同时支持 svn 和 http访问

    1. 安装 svn [root@svn conf]#yum install subversion [root@svn conf]# svn --version svn, version 1.7.14 ...

  8. SVN冲突出现原因及解决方法浅谈

    缘由 很简单,用svn合base,出现了各种各样奇怪的问题,虽然最终没有造成什么大的线上问题,但过程也是曲折的,耗费个人精力,也占用他人资源,不好不好,一点都不佛系. 究其原因,还是对为什么出现各种冲 ...

  9. (二十五)svn的问题

    今天更新代码到svn中的时候出现了错误,准确的说是在操作更新之前的步骤出现了错误,因此对svn有了更近一步的理解.    check:下载svn中的代码到指定的储存路径中:    update:更新s ...

随机推荐

  1. 常见Git操作及关键知识点

    一.Git三区概念 工作区 (work dict) 暂存区(stage)(add 是添加到当前的暂存区) 提交区(就是当前工作的分支master分支或者branches分支) git 所有操作都是基于 ...

  2. (转)如何转载CSDN的文章

    前言   对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人的博客移到自己的空间 ...

  3. from sklearn.datasets import make_classification创建分类数据集

    make_classification创建用于分类的数据集,官方文档 例子: ### 创建模型 def create_model(): # 生成数据 from sklearn.datasets imp ...

  4. (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图

    (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图 http://www.cnblogs.com/macroxu-1982/archive/2011/09/13 ...

  5. AngularX 指令(ngForof)(转载)

    该指令用于基于可迭代对象中的每一项创建相应的模板.每个实例化模板的上下文对象继承于外部的上下文对象,其值与可迭代对象对应项的值相关联. NgForOf 指令语法 * 语法糖 <li *ngFor ...

  6. 使用 GitVersion 在编译或持续构建时自动使用语义版本号(Semantic Versioning)

    我们在之前谈过 语义版本号(Semantic Versioning),在项目中应用语义版本号能够帮助库的开发者在发布包时表明更多的语义信息.这是趋势,从微软的博客 Versioning NuGet p ...

  7. MD5加盐加密

    package com.chauvet.utils; import java.security.NoSuchAlgorithmException; import java.util.Random; / ...

  8. mock的使用二(根据数据模板生成模拟数据)

    Mock.mock( rurl?, rtype?, template|function( options ) ) 根据数据模板生成模拟数据. Mock.mock( template ) 根据数据模板生 ...

  9. 谷歌被墙后,能够搜索的ip地址

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/langresser/article/details/32339707 http://209.116. ...

  10. oracle11g卸载(win10)

    oracle11g卸载(win10) 0.已在win10安装oracle11g 1.开始->设置->控制面板->管理工具->服务 停止所有Oracle服务. 2.运行Unive ...