如何查看最近的SVN日志条目?

在命令行中输入svn log会吐出一个长得令人难以置信、毫无用处的列表。我不知道为什么这是默认值。如果我想在终端上读取(甚至可以读取)300个条目,我不介意输入svn log --full或类似的东西。

也许SVN的人认为我想把输出提供给另一个程序。然而,如果是这样的话,对程序(而不是终端用户)进行更详细的调用会更有意义。

总之,我怎么能看到最近的活动,比如最近的5个或10个条目,看看有什么变化?

206122 次浏览

通过less或其他分页器管道输出:

svn log | less

limit选项,例如:

svn log --limit 4


svn log -l 4

只有最后4项

除了伯特F说之外,包括log在内的许多命令都有-r(或--revision)选项。下面是一些使用该选项显示修订范围的实际示例:

按升序列出所有内容:

svn log -r 1:HEAD

按降序列出所有内容:

svn log -r HEAD:1

按升序列出从第十三到当前签出修订的底部的所有内容:

svn log -r 13:BASE

获取给定日期之间的所有内容:

svn log -r {2011-02-02}:{2011-02-03}

你可以把上面所有的表达式和--limit选项结合起来,这样你就可以对打印的内容有一个相当细粒度的控制。有关这些-r表达式的更多信息,请参阅svn help log使用Subversion进行版本控制书中的相关章节

我喜欢使用-v作为详细模式 它会给你提交id,注释和所有受影响的文件

svn log -v --limit 4

输出示例:

I added some migrations and deleted a test xml file
------------------------------------------------------------------------
r58687 | mr_x | 2012-04-02 15:31:31 +0200 (Mon, 02 Apr 2012) | 1 line Changed
paths:
A /trunk/java/App/src/database/support
A /trunk/java/App/src/database/support/MIGRATE
A /trunk/java/App/src/database/support/MIGRATE/remove_device.sql
D /trunk/java/App/src/code/test.xml

为了补充其他人所说的,你也可以在你的.bashrc或.bash_aliases文件中创建一个别名:

alias svnlog='svn log -l 30 | less'

或者任何你想要的默认值

但是svn log仍然是相反的顺序,即最近的条目是先输出的,从我的终端顶部滚动并消失。我真的想看到最后的条目,即排序顺序必须是时间顺序。唯一能做到这一点的命令似乎是svn log -r 1:HEAD,但这在一个有10000个条目的存储库上花费的时间太长了。我想到了这个

按时间顺序显示最后10个subversion条目:

svn log -r $(svn log -l 10 | grep '^r[0-9]* ' | tail -1 | cut -f1 -d" "):HEAD

如果有人正在看这个老问题,一个方便的命令来查看自上次更新以来的变化:

svn log -r $(svn info | grep Revision | cut -f 2 -d ' '):HEAD -v

LE(谢谢Gary的评论)
同样的东西,但是更短更符合逻辑:

svn log -r BASE:HEAD -v

正如你已经注意到的,在没有任何参数的情况下运行svn log命令会显示与你指定的URL或运行该命令的工作副本文件夹相关的所有日志消息。

你总是可以细化/限制svn log结果:

  • svn log --limit NUM将只显示修订的第一个NUM,
  • svn log --revision REV1(:REV2)将显示REV1修订或REV1—REV2范围的日志消息,
  • svn log --search将显示与您指定的搜索模式匹配的修订版(该命令可在Subversion 1.8和更新的客户端中使用)。你可以通过
    • 修订的作者(即提交者的用户名),
    • 修订提交日期:
    • 修订注释文本(日志消息),
    • 在修订中更改的路径列表。
    • 李< / ul > < / >

此回答针对有关Subversion子命令选项的进一步问题。对于每一个可用的子命令(即add, log, status…),你可以简单地添加--help选项来显示你可以与子命令一起使用的可用选项的完整列表,以及如何使用它们的示例。下面的代码片段直接取自"examples"部分的svn log --help命令输出:

Show the latest 5 log messages for the current working copy
directory and display paths changed in each commit:
svn log -l 5 -v