本文档尚未完善,内容可能随时更改,可能无法准确描述任何已发布的 Apache™ Subversion® 软件版本。将此页面添加为书签或推荐给其他人可能不是明智之举。请访问 https://svnbook.subversion.org.cn/ 获取此书的稳定版本。
正如我们在 名为“版本”的部分 中所述,Subversion 中的版本号非常直观——随着您对版本化数据进行更多更改,整数将不断增大。但是,很快您将不再能够准确记住每个版本中发生的事件。幸运的是,典型的 Subversion 工作流程通常不需要您对所执行的 Subversion 操作提供任意版本。对于确实需要版本标识符的操作,您通常会提供一个在提交电子邮件、其他 Subversion 操作的输出或其他赋予该特定数字意义的上下文中看到的版本号。
注意 | |
---|---|
在 Subversion 社区中,使用带有 “ |
但是,有时您需要精确地确定一个您尚未记住或没有准备好的版本号的时间点。因此,除了整数版本号之外,svn 还允许将一些其他形式的版本标识符作为输入:版本关键字和版本日期。
注意 | |
---|---|
在用于指定版本范围时,Subversion 版本标识符的各种形式可以混合匹配使用。例如,您可以使用 |
Subversion 客户端理解多个版本关键字。这些关键字可以代替 --revision
(-r
) 选项的整数参数使用,并且由 Subversion 解析为特定的版本号。
正如从它们的描述中可以推断出的那样,PREV
、BASE
和 COMMITTED
版本关键字仅在引用工作副本路径时使用——它们不适用于存储库 URL。另一方面,HEAD
可以与这两种路径类型一起使用。
以下是版本关键字在实际操作中的一些示例
$ 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 正确地将版本日期转换为实际版本号的能力取决于版本日期戳保持顺序——版本越新,其日期戳越新。但日期戳存储在版本未版本化的可修改 |