你怎么看最近的SVN日志条目?

Xeo*_*oss 190 svn

键入svn log在命令行上吐出一个令人难以置信的长而无用的列表.我不知道为什么这是默认值.如果我想在终端上阅读(甚至可以阅读)300个条目,我不介意打字svn log --full或类似的东西.

也许SVN的人认为我想把这个输出提供给另一个程序.但是,如果是这种情况,那么对程序进行更详细的调用会更有意义 - 而不是终端用户.

无论如何,我怎么看到最近的一些活动,比如过去的5或10个条目,看看有什么变化?

Ber*_*t F 257

limit 选项,例如:

svn log --limit 4

svn log -l 4
Run Code Online (Sandbox Code Playgroud)

只有最后4个条目


Dan*_*yes 124

况且什么伯特˚F说,很多命令,包括log-r(或--revision)选项.以下是使用此选项显示修订范围的一些实际示例:

按升序列出所有内容:

svn log -r 1:HEAD
Run Code Online (Sandbox Code Playgroud)

按降序列出所有内容:

svn log -r HEAD:1
Run Code Online (Sandbox Code Playgroud)

要按升序列出当前检出的修订版的第13个到基础的所有内容:

svn log -r 13:BASE
Run Code Online (Sandbox Code Playgroud)

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

svn log -r {2011-02-02}:{2011-02-03}
Run Code Online (Sandbox Code Playgroud)

您可以将所有上述表达式与--limit选项结合使用,这样您就可以对打印的内容进行非常精细的控制.有关这些-r表达式的更多信息,请参阅" 使用Subversion版本控制svn help log "一书中的相关章节

  • 非常感谢@Daniel Dinnyes的解释 - 我经常遇到与OP相反的问题:`svn log .`可能只返回我最早的版本(同样用`svn log --limit 4 .`); 但如果我调用`svn log -r HEAD:1 .`,那么我最终会列出所有条目...再次感谢 - 欢呼! (8认同)

Jon*_*röm 41

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

svn log -v --limit 4
Run Code Online (Sandbox Code Playgroud)

输出示例:

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
Run Code Online (Sandbox Code Playgroud)

  • 详细选项非常有用 (2认同)

Gre*_*ill 11

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

svn log | less
Run Code Online (Sandbox Code Playgroud)


Cat*_*lin 7

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

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

LE(感谢 Gary 的评论)
同样的事情,但更短,更合乎逻辑:

svn log -r BASE:HEAD -v

  • 或者只是`svn log -r BASE:HEAD -v` (9认同)

jam*_*art 5

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

alias svnlog='svn log -l 30 | less'
Run Code Online (Sandbox Code Playgroud)

或者你想要的任何默认值


小智 5

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

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

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


小智 5

此答案针对有关 Subversion 子命令选项的进一步问题。对于每个可用的子命令(即 add、log、status ...),您只需添加选项即可--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
Run Code Online (Sandbox Code Playgroud)