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


194

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

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

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


9
是的,它确实应该像,嗯git log
Paul Draper 2014年

Answers:


261

limit 选项,例如:

svn log --limit 4

svn log -l 4

仅最后4个条目


127

况且什么伯特˚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表达式的更多信息,请参考《带Subversion的版本控制》中svn help log的相关章节。


8
@Daniel Dinnyes非常感谢您的解释-我经常在OP中遇到相反的问题:svn log .可能只为我返回最早的修订版(同样使用svn log --limit 4 .);但是如果我致电svn log -r HEAD:1 .,那么我最终会列出所有条目...再次感谢-欢呼!
sdaau 2011年

这样更好,因为svn log 仅显示当前路径的更改历史记录。
忍者

41

我喜欢用 -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

2
详细选项非常有用
Jason George

如果开发团队真的很热情,他们可以将问题ID放在svn注释中,您可以轻松找到与提交相关的问题。
JonasSöderström13年

11

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

svn log | less

1
如果您有> 23k的修订版,您仍将等待约20秒钟才能看到第一个条目(并且在不使用详细日志时)。但这很好-在顶部显示最新的。比TortoiseSVN的一次100页分页更好!当您想往后退。
Tomasz Gandor 2012年

6

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

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

LE(感谢Gary的评论)是
一样的东西,但更简短,更合乎逻辑:

svn log -r BASE:HEAD -v


8
或者只是svn log -r BASE:HEAD -v
Gary

5

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

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

或任何您想要的默认值


4

正如您已经注意到的,svn log不带任何参数的命令运行将显示与您指定的URL或运行命令的工作副本文件夹相关的所有日志消息。

您始终可以优化/限制svn log结果:

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

4

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

3

但是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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.