This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.
我们已经在 “版本号”一节 说过, Subversion 的版本号非常直观—随着提交的不断增多, 表示版本号的整数 也不断增大, 但是用不了多久, 用户就再也记不清每个版本号包含了哪些修改. 幸运的是, Subversion 的典型工作流程不太经常要求用户提供版本号, 对于 那些确实需要版本号的操作而言, 用户可以从提交日志中看到所需的版本号, 或者 使用在特定语境下可以表示特定版本号的关键字.
注意 | |
---|---|
在引用版本号时, 在数字的左边增加一个前缀
“ |
但是在少数情况下, 用户必须及时精确地描述出版本号, 可是手上却没有合适的参数. 所以除了用整数指定版本号外, svn 还支持另外两种指定版本 号的形式: 版本号关键字 (revision keywords) 和版本号日期.
注意 | |
---|---|
在指定版本号范围时, 可以混合使用不同形式的版本号指示器, 例如你可
以把 |
Subversion 支持理解的版本号关键字有很多个, 可以用这些关键字替换
选项 --revision
(-r
) 后面的整数,
这些关键字会被 Subversion 解释成特定的版本号:
从它们的描述可以看出, PREV
,
BASE
和 COMMITTED
只能引用工作
副本中的路径, 而 HEAD
既可以引用工作副本中的路径,
也可以引用仓库的 URL.
下面是一些版本号关键字的使用示例:
$ svn diff -r PREV:COMMITTED foo.c # shows the last change committed to foo.c $ svn log -r HEAD # shows log message for the latest repository commit $ svn diff -r HEAD # compares your working copy (with all of its local changes) to the # latest version of that tree in the repository $ svn diff -r BASE:HEAD foo.c # compares the unmodified version of foo.c with the latest version of # foo.c in the repository $ svn log -r BASE:HEAD # shows all commit logs for the current versioned directory since you # last updated $ svn update -r PREV foo.c # rewinds the last change on foo.c, decreasing foo.c's working revision $ svn diff -r BASE:14 foo.c # compares the unmodified version of foo.c with the way foo.c looked # in revision 14
版本号没有透露出一丝一毫与版本控制系统外部世界相关的信息, 但是有
时候你需要把真实世界的时间与版本控制历史的时间联系起来. 为此, 选项
--revision
(-r
) 也接受日期形式的
参数, 日期用一对花括号 ({
和 }
)
包裹起来, Subversion 接受标准的 ISO-8601 格式的日期与时间, 以及其他
一些形式, 下面是一些例子.
$ svn update -r {2006-02-17} $ svn update -r {15:30} $ svn update -r {15:30:00.200000} $ svn update -r {"2006-02-17 15:30"} $ svn update -r {"2006-02-17 15:30 +0230"} $ svn update -r {2006-02-17T15:30} $ svn update -r {2006-02-17T15:30Z} $ svn update -r {2006-02-17T15:30-04:00} $ svn update -r {20060217T1530} $ svn update -r {20060217T1530Z} $ svn update -r {20060217T1530-0500} …
注意 | |
---|---|
如果版本号日期参数中含有空格, 那么大多数 shell 都会要求用引号 包围参数, 或者对参数中的空格进行转义, 某些 shell 可能还会要求对花 括号进行转义, 具体的细节可以查阅你所用的 shell 的文档. |
如果用户指定了一个日期, Subversion 就把该日期解析成最近的版本号, 然后再针对该版本号进行操作:
$ svn log -r {2006-11-28} ------------------------------------------------------------------------ r12 | ira | 2006-11-27 12:31:51 -0600 (Mon, 27 Nov 2006) | 6 lines …
还可以指定一段日期范围, 此时 Subversion 会找到这段时间内的所有 版本号, 包括开始日期和结束日期:
$ svn log -r {2006-11-20}:{2006-11-29} …
警告 | |
---|---|
Subversion 能够根据版本号日期得到版本号是因为版本号的时间戳被维护
成一个串行化的序列—版本号越年轻, 时间戳也就越年轻. 但是时间戳
是存放在版本号的 |