### 修订版本: 号码、关键字和日期,噢,我的!
在继续之前你一定要知道如何识别版本库的一个修订版本,像你在[“修订版本”一节]( "修订版本")看到的,一个修订版本就是版本库的一个“快照”,当你的版本库持续扩大,你必须有手段来识别这些快照。
你可以使用`--revision`(`-r`)参数来选择特定修订版本(**svn --revision REV**),你也可以指定在两个修订版本之间的一个范围 (**svn --revision REV1:REV2**)。你可以在Subversion中通过修订版本号、关键字或日期指定特定修订版本。
### 修订版本号
当你新建了一个Subversion版本库,从修订版本号0开始,每一次成功的提交加1,当你提交成功,Subversion告诉客户端这个新版本号:
~~~
$ svn commit --message "Corrected number of cheese slices."
Sending sandwich.txt
Transmitting file data .
Committed revision 3.
~~~
如果你想在未来使用这个版本(我们将在此章的后面讲述我们这样做的方式和原因),你可以通过号码“3”指定。
### 修订版本关键字
Subversion客户端可以理解一些*修订版本关键字*,这些关键字可以用来代替`--revision`的数字参数,这会被Subversion解释到特定版本:
### 注意
工作拷贝中的每一个目录都有一个叫作`.svn`的管理目录,工作目录中的每一个文件,Subversion在管理区域为它保留了一个备份,这是上一个版本(叫做“BASE”版本)没有修改的(没有关键字变化,没有行结束符号转化,没有任何改动)拷贝,我们把这个文件当作*原始拷贝*或*基准文件*使用,它与版本库中的文件完全一样。
HEAD
版本库中最新的版本。
BASE
工作拷贝中的“原始”修订版本。
COMMITTED
在`BASE`版本之前(或在Base)一个项目最后修改的版本。
PREV
一个项目最后修改版本*之前*的那个版本(技术上为COMMITTED -1)。
### 注意
`PREV`、`BASE`、和`COMMITTED`指的都是本地路径而不是URL。
下面是一些关键字使用的例子,不要担心现在没有意义,我们将在本章的后面解释这些命令:
~~~
$ svn diff --revision PREV:COMMITTED foo.c
# shows the last change committed to foo.c
$ svn log --revision HEAD
# shows log message for the latest repository commit
$ svn diff --revision HEAD
# compares your working file (with local mods) to the latest version
# in the repository.
$ svn diff --revision BASE:HEAD foo.c
# compares your “pristine” foo.c (no local mods) with the
# latest version in the repository
$ svn log --revision BASE:HEAD
# shows all commit logs since you last updated
$ svn update --revision PREV foo.c
# rewinds the last change on foo.c.
# (foo.c's working revision is decreased.)
~~~
这些关键字允许你执行许多常用(而且有用)的操作,而不必去查询特定的修订版本号,或者记住本地拷贝的修订版本号。
### 修订版本日期
在任何你使用特定版本号和版本关键字的地方,你也可以在“{}”中使用日期,你也可通过日期或者版本号配合使用来访问一段时间的修改!
如下是一些Subversion能够接受的日期格式,注意在日期中有空格时需要使用引号。
~~~
$ svn checkout --revision {2002-02-17}
$ svn checkout --revision {15:30}
$ svn checkout --revision {15:30:00.200000}
$ svn checkout --revision {"2002-02-17 15:30"}
$ svn checkout --revision {"2002-02-17 15:30 +0230"}
$ svn checkout --revision {2002-02-17T15:30}
$ svn checkout --revision {2002-02-17T15:30Z}
$ svn checkout --revision {2002-02-17T15:30-04:00}
$ svn checkout --revision {20020217T1530}
$ svn checkout --revision {20020217T1530Z}
$ svn checkout --revision {20020217T1530-0500}
…
~~~
当你指定一个日期,Subversion会在版本库找到接近这个日期的最新版本:
~~~
$ svn log --revision {2002-11-28}
------------------------------------------------------------------------
r12 | ira | 2002-11-27 12:31:51 -0600 (Wed, 27 Nov 2002) | 6 lines
…
~~~
**Subversion会早一天吗?**
如果你只是指定了日期而没有时间(举个例子`2002-11-27`),你也许会以为Subversion会给你11-27号最后的版本,相反,你会得到一个26号版本,甚至更早。记住Subversion会根据你的日期找到*最新的*版本,如果你给一个日期,而没有给时间,像`2002-11-27`,Subversion会假定时间是00:00:00,所以在27号找不到任何版本。
如果你希望查询包括27号,你既可以使用(`{"2002-11-27 23:59"}`),或是直接使用(`{2002-11-28}`)。
你可以使用时间段,Subversion会找到这段时间的所有版本:
~~~
$ svn log --revision {2002-11-20}:{2002-11-29}
…
~~~
我们也曾经指出,你可以混合日期和修订版本号:
~~~
$ svn log --revision {2002-11-20}:4040
~~~
用户一定要认识到这种精巧会成为处理日期的绊脚石,因为一个版本的时间戳是作为一个属性存储的―不是版本化的,而是可以编辑的属性―版本号的时间戳可以被修改,从而建立一个虚假的年代表,也可以被完全删除。这将大大破坏Subversion的这种时间―版本转化功能的表现。
- 第1章介绍
- Subversion的历史
- Subversion的特性
- Subversion的架构
- 安装Subversion
- Subversion的组件
- 快速入门
- 第2章基本概念
- 版本模型
- Subversion实战
- 摘要
- 第3章指导教程
- 导入
- 修订版本: 号码、关键字和日期,噢,我的!
- 初始化的Checkout
- 基本的工作周期
- 检验历史
- 其他有用的命令
- 摘要
- 第4章分支与合并
- 使用分支
- 在分支间拷贝修改
- 常见用例
- 转换工作拷贝
- 标签
- 分支维护
- 摘要
- 第5章版本库管理
- 版本库的创建和配置
- 版本库维护
- 添加项目
- 摘要
- 第6章配置服务器
- 网络模型
- svnserve,一个自定义的服务器
- httpd,Apache的HTTP服务器
- 支持多种版本库访问方法
- 第7章高级主题
- 属性
- Peg和实施修订版本
- 外部定义
- 卖主分支
- 本地化
- Subversion版本库URL
- 第8章开发者信息
- 使用API
- 进入工作拷贝的管理区
- WebDAV
- 使用内存池编程
- 为Subversion做贡献
- 第9章Subversion完全参考
- svn add
- svn blame
- svn cat
- svn checkout
- svn cleanup
- svn commit
- svn copy
- svn delete
- svn diff
- svn export
- svn help
- svn import
- svn info
- svn list
- svn log
- svn merge
- svn mkdir
- svn move
- svn propdel
- svn propedit
- svn propget
- svn proplist
- svn propset
- svn resolved
- svn revert
- svn status
- svn switch
- svn update
- svnadmin
- svnadmin create
- svnadmin deltify
- svnadmin dump
- svnadmin help
- svnadmin hotcopy
- svnadmin list-dblogs
- svnadmin list-unused-dblogs
- svnadmin load
- svnadmin lstxns
- svnadmin recover
- svnadmin rmtxns
- svnadmin setlog
- svnadmin verify
- svnlook
- svnlook author
- svnlook cat
- svnlook changed
- svnlook date
- svnlook diff
- svnlook dirs-changed
- svnlook help
- svnlook history
- svnlook info
- svnlook log
- svnlook propget
- svnlook proplist
- svnlook tree
- svnlook uuid
- svnlook youngest
- svnserve
- svnversion
- mod_dav_svn Configuration Directives
- 附录A.Subversion对于CVS用户
- 目录的版本
- 更多离线操作
- 区分状态和更新
- 分支和标签
- 元数据属性
- 冲突解决
- 二进制文件和转化
- 版本化的模块
- 认证
- 转化CVS版本库到Subversion
- 附录C.WebDAV和自动版本化
- 自动版本化交互性
- Subversion和DeltaV
- 术语表