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.
svn log — 显示提交日志消息.
svn log [
PATH
]
svn log
URL
[@REV
] [PATH
...]
显示仓库的日志消息. 如果没有指定目标参数, svn
log 将显示当前工作副本目录的日志消息. 为了提炼输出结果,
你可以指定一个路径, 一个或多个版本号, 或路径与版本号的组合. Subversion
为一个本地路径打印的默认版本号范围是 BASE:1
.
如果用户只指定了一个 URL, 命令将会为 URL 内的所有文件打印日志
消息, 如果你在 URL 中添加了路径, 命令将只打印该路径的日志消息.
Subversion 为一个 URL 打印的默认版本号范围是 BASE:1
.
如果添加了选项 --verbose
(-v
),
svn log 还会额外打印在本次修改中受到影响的路径.
如果添加了选项 --quiet
(-q
),
svn log 将不会打印日志消息的文本内容, 这个选项和
选项 --verbose
(-v
) 是兼容的.
即使在一次提交中受到影响的路径在命令行中出现了多次, 对应的日志
消息也只显示一次. 日志默认会跟随复制历史, 但可以用选项
--stop-on-copy
禁止跟随, 这可以用来判断创建分支的
时间点.
--change
(-c
)ARG
--depth
ARG
--diff
--diff-cmd
CMD
--extensions
(-x
)ARG
--incremental
--internal-diff
--limit
(-l
)NUM
--quiet
(-q
)--revision
(-r
)REV
--search
ARG
--search-and
ARG
--stop-on-copy
--targets
FILENAME
--use-merge-history
(-g
)--verbose
(-v
)--with-all-revprops
--with-no-revprops
--with-revprop
ARG
--xml
如果直接运行 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 …
如果添加了选项 --verbose
(-v
),
svn log 还会打印在版本号中被修改的路径, 每个路径
都占据单独的一行, 并在行的开头添加能够表示修改类型的操作码.
$ svn log -v 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 Changed paths: M /foo.c Added defines. ------------------------------------------------------------------------ r31 | harry | 2003-01-10 12:25:08 -0600 (Fri, 10 Jan 2003) | 1 line Changed paths: A /bar.c Added new file bar.c ------------------------------------------------------------------------ r28 | sally | 2003-01-07 21:48:33 -0600 (Tue, 07 Jan 2003) | 3 lines …
svn log 只使用了几种操作码, 这些操作码和命令 svn update 使用的操作码非常类似:
A
该项是新增的.
D
该项被删除了.
M
该项的属性或内容被修改了.
R
该项被其他项目替换了.
除了在路径前加上操作码, 添加了选项 --verbose
(-v
) 的 svn log 还会注释路径
是否是通过复制得到的, 注释的形式是在路径后加上 (from
.COPY-FROM-PATH
:COPY-FROM-REV
)
如果你想串联多个 svn log 的执行结果, 那你可能
需要选项 --incremental
. svn log
通常会在开始打印日志消息之前, 在打印完一条日志消息之后, 以及打印完最
后一条日志消息之后打印一行连字符. 如果你用 svn log
查询一段版本号范围内的日志, 你将会得到:
$ svn log -r 14:15 ------------------------------------------------------------------------ r14 | … ------------------------------------------------------------------------ r15 | … ------------------------------------------------------------------------
然而, 如果你想把多个不连续的日志消息写到一个文件中, 你可能会这 样做:
$ svn log -r 14 > mylog $ svn log -r 19 >> mylog $ svn log -r 27 >> mylog $ cat mylog ------------------------------------------------------------------------ r14 | … ------------------------------------------------------------------------ ------------------------------------------------------------------------ r19 | … ------------------------------------------------------------------------ ------------------------------------------------------------------------ r27 | … ------------------------------------------------------------------------
为了避免出现凌乱的双条连字符行, 可以为 svn log
加上选项 --incremental
:
$ svn log --incremental -r 14 > mylog $ svn log --incremental -r 19 >> mylog $ svn log --incremental -r 27 >> mylog $ cat mylog ------------------------------------------------------------------------ r14 | … ------------------------------------------------------------------------ r19 | … ------------------------------------------------------------------------ r27 | …
如果已经添加了选项 --xml
, 再加上选项
--incremental
后能提供类似的输出控制:
$ svn log --xml --incremental -r 1 sandwich.txt <logentry revision="1"> <author>harry</author> <date>2008-06-03T06:35:53.048870Z</date> <msg>Initial Import.</msg> </logentry>
提示 | |
---|---|
有时候, 如果你用 svn log 查询某个路径在 特定版本号上的历史, 你可能看不到任何日志被打印出来, 例如: $ svn log -r 20 http://svn.red-bean.com/untouched.txt ------------------------------------------------------------------------ 这仅仅意味着该路径在该版本号上没有发生任何修改. 为了得到该版本 号的日志消息, 要么把仓库的根目录 URL 作为目标, 要么你很清楚该版本 号修改了哪个路径, 并把它作为目标: $ svn log -r 20 touched.txt ------------------------------------------------------------------------ r20 | sally | 2003-01-17 22:56:19 -0600 (Fri, 17 Jan 2003) | 1 line Made a change. ------------------------------------------------------------------------ |
从 Subversion 1.7 开始, svn log 支持一种特殊
的输出模式, 该模式和 svn diff 一样能够把修改以
标准差异格式输出, 方法就是为 svn log 加上选项
--diff
:
$ svn log -r 20 touched.txt --diff ------------------------------------------------------------------------ r20 | sally | 2003-01-17 22:56:19 -0600 (Fri, 17 Jan 2003) | 1 line Made a change. Index: touched.txt =================================================================== --- touched.txt (revision 19) +++ touched.txt (revision 20) @@ -1 +1,2 @@ This is the file 'touched.txt'. +We add such exciting text to files around here! ------------------------------------------------------------------------ $
和 svn diff 一样, 用户可以利用选项
--depth
, --diff-cmd
和
--extensions
(-x
) 控制差异比较的
具体行为.
从 Subversion 1.8 开始, 用户可以用选项 --search
和 --search-and
过滤 svn log 的
输出. 如果在命令中用到了这两个选项, 那么仅当版本号的作者, 提交日期,
日志消息内容或被修改的路径和模式匹配时, 日志消息才会被打印出来. 在
匹配被修改的路径时, 还要求加上选项 --verbose
, 否则
的话 svn log 不会去匹配被修改的路径.
搜索模式 (也被称作文本表达式或 Shell 通配符模式) 可以包含普通 字符和下面的通配符:
?
匹配任意一个字符.
*
匹配任意一个字符序列.
[ABC]
匹配中括号内的任意一个字符.
如果选项 --search
出现了多次, 那么只要任意一个
模式得到匹配, 日志消息就会被打印, 例如:
$ svn log --search sally --search harry https://svn.red-bean.com/repos/test ------------------------------------------------------------------------ r1701 | sally | 2011-10-12 22:35:30 -0600 (Wed, 12 Oct 2011) | 1 line Add a reminder. ------------------------------------------------------------------------ r1564 | harry | 2011-10-09 22:35:30 -0600 (Sun, 09 Oct 2011) | 1 line Merge r1560 to the 1.0.x branch. ------------------------------------------------------------------------ $
如果选项 --search
和
--search-and
一起使用, 则只有同时匹配所有模式的
日志消息才会被打印, 例如:
$ svn log --verbose --search sally --search-and /foo/bar https://svn.red-bean.com/repos/test ------------------------------------------------------------------------ r1555 | sally | 2011-07-15 22:33:14 -0600 (Fri, 15 Jul 2011) | 1 line Changed paths: M /foo/bar/src.c Typofix. ------------------------------------------------------------------------ r1530 | sally | 2011-07-13 07:24:11 -0600 (Wed, 13 Jul 2011) | 1 line Changed paths: M /foo/bar M /foo/build Fix up some svn:ignore properties. ------------------------------------------------------------------------ $
提示 | |
---|---|
选项 |