本手册旨在描述 Subversion 1.2 版本。如果您使用的是更新版本的 Subversion,强烈建议您访问 https://svnbooks.subversion.org.cn/ 并查阅与您的 Subversion 版本相符的手册。

名称

svn log — 显示提交日志消息。

概要

svn log [PATH]
svn log URL [PATH...]

描述

默认目标是当前目录的路径。如果没有提供参数,svn log 会显示当前工作副本中(包括)所有文件和目录的日志消息。您可以通过指定路径、一个或多个修订版本,或两者结合来细化结果。本地路径的默认修订版本范围是 BASE:1

如果您仅指定一个 URL,它将打印该 URL 包含的所有内容的日志消息。如果您在 URL 后添加路径,则仅打印该 URL 下这些路径的日志消息。URL 的默认修订版本范围是 HEAD:1

使用 --verbose 选项,svn log 还将打印每个日志消息的所有受影响路径。使用 --quiet 选项,svn log 不会打印日志消息正文本身(这与 --verbose 选项兼容)。

每个日志消息仅打印一次,即使该修订版本的多个受影响路径被明确请求。默认情况下,日志会跟踪复制历史。使用 --stop-on-copy 禁用此行为,这对于确定分支点很有用。

其他名称

更改

访问版本库

开关

--revision (-r) REV
--quiet (-q)
--verbose (-v)
--targets FILENAME
--stop-on-copy
--incremental
--limit NUM
--xml
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

示例

您可以通过在顶层运行 svn log 来查看工作副本中所有发生更改的路径的日志消息。

$ svn log
------------------------------------------------------------------------
r20 | harry | 2003-01-17 22:56:19 -0600 (Fri, 17 Jan 2003) | 1 line

Tweak.
------------------------------------------------------------------------
r17 | sally | 2003-01-16 23:21:19 -0600 (Thu, 16 Jan 2003) | 2 lines
…

检查工作副本中特定文件的全部日志消息。

$ svn log foo.c
------------------------------------------------------------------------
r32 | sally | 2003-01-13 00:43:13 -0600 (Mon, 13 Jan 2003) | 1 line

Added defines.
------------------------------------------------------------------------
r28 | sally | 2003-01-07 21:48:33 -0600 (Tue, 07 Jan 2003) | 3 lines
…

如果您没有现成的工作副本,您可以记录一个 URL。

$ svn log http://svn.red-bean.com/repos/test/foo.c
------------------------------------------------------------------------
r32 | sally | 2003-01-13 00:43:13 -0600 (Mon, 13 Jan 2003) | 1 line

Added defines.
------------------------------------------------------------------------
r28 | sally | 2003-01-07 21:48:33 -0600 (Tue, 07 Jan 2003) | 3 lines
…

如果您需要在同一 URL 下查看多个不同的路径,可以使用 URL [PATH...] 语法。

$ svn log http://svn.red-bean.com/repos/test/ foo.c bar.c
------------------------------------------------------------------------
r32 | sally | 2003-01-13 00:43:13 -0600 (Mon, 13 Jan 2003) | 1 line

Added defines.
------------------------------------------------------------------------
r31 | harry | 2003-01-10 12:25:08 -0600 (Fri, 10 Jan 2003) | 1 line

Added new file bar.c
------------------------------------------------------------------------
r28 | sally | 2003-01-07 21:48:33 -0600 (Tue, 07 Jan 2003) | 3 lines
…

当您要将对 log 命令的多次调用的结果连接在一起时,您可能希望使用 --incremental 开关。 svn log 通常在每个日志消息的开头、每个后续日志消息之后以及最后一个日志消息之后打印一条虚线。如果您在一个包含两个修订版本的范围内运行 svn log,您将得到以下结果

$ svn log -r 14:15
------------------------------------------------------------------------
r14 | ... 

------------------------------------------------------------------------
r15 | ... 

------------------------------------------------------------------------

但是,如果您想要将 2 条非连续的日志消息收集到一个文件中,您可以执行以下操作

$ svn log -r 14 > mylog
$ svn log -r 19 >> mylog
$ svn log -r 27 >> mylog
$ cat mylog
------------------------------------------------------------------------
r14 | ... 

------------------------------------------------------------------------
------------------------------------------------------------------------
r19 | ... 

------------------------------------------------------------------------
------------------------------------------------------------------------
r27 | ... 

------------------------------------------------------------------------

您可以使用 incremental 开关避免输出中出现双虚线造成的混乱。

$ svn log --incremental -r 14 > mylog
$ svn log --incremental -r 19 >> mylog
$ svn log --incremental -r 27 >> mylog
$ cat mylog
------------------------------------------------------------------------
r14 | ... 

------------------------------------------------------------------------
r19 | ... 

------------------------------------------------------------------------
r27 | ... 

--incremental 开关在使用 --xml 开关时提供类似的输出控制。

提示

如果您在特定路径上运行 svn log 并提供特定修订版本,但没有输出

$ svn log -r 20 http://svn.red-bean.com/untouched.txt
------------------------------------------------------------------------

这仅仅意味着该路径在该修订版本中没有被修改。如果您从版本库的顶层进行日志记录,或知道该修订版本中发生更改的文件,则可以明确指定该文件。

$ svn log -r 20 touched.txt 
------------------------------------------------------------------------
r20 | sally | 2003-01-17 22:56:19 -0600 (Fri, 17 Jan 2003) | 1 line

Made a change.
------------------------------------------------------------------------
TortoiseSVN 官方中文版 1.14.7 发布