本手册旨在描述 Apache™ Subversion® 的 1.7.x 系列。如果您运行的是其他版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的文档。

名称

svn blame (praise, annotate, ann) — 显示指定文件或 URL 的作者和修订信息。

概要

svn blame TARGET[@REV]...

描述

显示指定文件或 URL 的作者和修订信息。每行文本开头都标注了作者(用户名)和对该行最后修改的修订号。

选项

示例

如果您想查看测试库中 readme.txt 的 blame 注解源代码

$ svn blame http://svn.red-bean.com/repos/test/readme.txt
     3      sally This is a README file.
     5      harry Don't bother reading it.  The boss is a knucklehead.
     3      sally 
…

现在,仅仅因为 svn blame 显示 Harry 在修订版 5 中最后修改了 readme.txt,请理解这个子命令默认情况下对构成更改非常挑剔。在责怪 Harry 似乎不服从命令之前,首先要考虑他可能对文件的更改只是针对其特定字符内容,而不是其整体语义含义。也许他的更改是由于盲目地对该文件运行了空白清理脚本造成的。您可能需要检查具体的差异和相关的日志消息,以准确了解 Harry 在修订版 5 中对该文件做了什么。

$ svn log -c 5 http://svn.red-bean.com/repos/test/readme.txt
------------------------------------------------------------------------
r5 | harry | 2008-05-29 07:26:12 -0600 (Thu, 29 May 2008) | 1 line

Commit the results of 'double-space-after-period.sh'.

------------------------------------------------------------------------
$ svn diff -c 5 http://svn.red-bean.com/repos/test/readme.txt
Index: http://svn.red-bean.com/repos/test/readme.txt
===================================================================
--- http://svn.red-bean.com/repos/test/readme.txt	(revision 4)
+++ http://svn.red-bean.com/repos/test/readme.txt	(revision 5)
@@ -1,5 +1,5 @@
 This is a README file.
-Don't bother reading it. The boss is a knucklehead.
+Don't bother reading it.  The boss is a knucklehead.
  
 INSTRUCTIONS
 ============
$

果然,Harry 只更改了该行的空白。幸运的是,--extensions (-x) 选项可以帮助您更好地确定对给定文本行进行 有意义 更改的最后时间。例如,以下是如何在忽略空白更改的同时查看注释信息

$ svn blame -x -b http://svn.red-bean.com/repos/test/readme.txt
     3      sally This is a README file.
     4       jess Don't bother reading it.  The boss is a knucklehead.
     3      sally 
…

如果您使用 --xml 选项,您可以获得描述 blame 注解的 XML 输出,但不会显示行的内容本身

$ svn blame --xml http://svn.red-bean.com/repos/test/readme.txt
<?xml version="1.0"?>
<blame>
<target
   path="readme.txt">
<entry
   line-number="1">
<commit
   revision="3">
<author>sally</author>
<date>2008-05-25T19:12:31.428953Z</date>
</commit>
</entry>
<entry
   line-number="2">
<commit
   revision="5">
<author>harry</author>
<date>2008-05-29T13:26:12.293121Z</date>
</commit>
</entry>
<entry
   line-number="3">
…
</entry>
</target>
</blame>
$