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


How do you see recent SVN log entries?

键入svn log会在命令行中弹出一个非常长的无用列表。 我不知道为什么这是默认设置。 如果我想在终端上读取(甚至可以读取)300个条目,则不必介意键入svn log --full或类似内容。

也许SVN家伙在想我想将输出提供给另一个程序。 但是,如果是这种情况,则对程序进行更详细的调用(而不是终端用户)会更有意义。

无论如何,如何查看最近的活动(例如最近的5或10个条目)以了解发生了什么变化?


limit选项,例如:

1
2
3
svn log --limit 4

svn log -l 4

仅最后4个条目


除了Bert F所说的以外,许多命令(包括log)都具有-r(或--revision)选项。以下是一些使用此选项显示修订范围的实用示例:

要以升序列出所有内容:

1
svn log -r 1:HEAD

要以降序列出所有内容:

1
svn log -r HEAD:1

要以升序列出从当前已检出修订本的第十三到基础的所有内容:

1
svn log -r 13:BASE

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

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

您可以将上述所有表达式与--limit选项结合使用,以便可以对打印的内容进行相当精细的控制。有关这些-r表达式的更多信息,请参考svn help log或《带Subversion的版本控制》一书中的相关章节。


我喜欢将-v用于详细模式。
它会为您提供提交ID,注释和所有受影响的文件。

1
svn log -v --limit 4

输出示例:

1
2
3
4
5
6
7
8
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


通过less或其他寻呼机通过管道传递输出:

1
svn log | less


如果有人在看这个老问题,可以使用一个方便的命令查看自上次更新以来的更改:

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

LE(感谢加里的评论)
同样的东西,但更短,更合乎逻辑:

svn log -r BASE:HEAD -v


要添加其他人所说的内容,您还可以在.bashrc或.bash_aliases文件中创建一个别名:

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

或任何您想要的默认值


该答案针对与Subversion子命令选项有关的其他问题。对于每个可用的子命令(即添加,日志,状态...),您只需添加--help选项即可显示可与子命令一起使用的可用选项的完整列表,以及有关如何使用它们的示例。以下代码段直接来自"示例"部分下的svn log --help命令输出:

1
2
3
Show the latest 5 log messages for the current working copy
directory and display paths changed in each commit:
  svn log -l 5 -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和更高版本的客户端中可用)。您可以通过以下方式搜索

    • 版本的作者(即提交者的用户名),
    • 提交修订的日期,
    • 修订注释文本(日志消息),
    • 修订中更改的路径列表。

但是svn log仍然是相反的顺序,即最新的条目首先输出,从我的终端顶部滚动走了。我真的很想查看最后一个条目,即排序顺序必须是按时间顺序排列的。唯一执行此操作的命令似乎是svn log -r 1:HEAD,但是在具有大约10000个条目的存储库中,这花费了太多时间。我这个是这样的:

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

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