如何在svn日志中显示特定用户的提交?

mim*_*ock 159 svn bash version-control

如何在svn中显示特定用户的提交?我没有为svn log找到任何开关.

yvo*_*yer 256

你可以用这个:

svn log | sed -n '/USERNAME/,/-----$/ p' 
Run Code Online (Sandbox Code Playgroud)

它将显示指定用户(USERNAME)所做的每次提交.

UPDATE

正如@bahrep所建议的那样,subversion 1.8附带了一个--search选项.

  • @MattHulse它的工作原理是因为它使用sed匹配两个指定正则表达式(用户名和短划线)之间的所有内容,然后告诉它打印它(`p`). (10认同)
  • 这个解决方案很完美.我想了解它在做什么,但我无法在解释它的sed文档中找到任何内容.任何人都有任何关于为什么这样的信息? (6认同)
  • @therobyouknow不,你不需要在工作副本上执行`svn log`.您还可以指定您的存储库,即`svn log https:// your-svn-repo`. (5认同)
  • 不再需要这样做了.使用支持`--search`选项的Subversion 1.8或更新的客户端. (4认同)

Mic*_*ler 95

使用Subversion 1.8或更高版本:

svn log --search johnsmith77 -l 50
Run Code Online (Sandbox Code Playgroud)

除了作者匹配之外,这也将在提交消息中显示包含该用户名的SVN提交,如果您的用户名不是常用词,则不应该发生这种情况.

-l 50将搜索范围限制为最新的50个条目.

--search ARG

过滤日志消息以仅显示与搜索模式ARG匹配的消息.

仅当提供的搜索模式与作者,日期,日志消息文本(除非--quiet使用)中的任何一个匹配时,或者,如果--verbose还提供了选项,则显示更改的路径,则仅显示日志消息.

如果--search提供了多个选项,则会显示与任何提供的搜索模式匹配的日志消息.

如果--limit使用,则限制搜索的日志消息数,而不是将输出限制为特定数量的匹配日志消息.

http://svnbook.red-bean.com/en/1.8/svn.ref.svn.html#svn.ref.svn.sw.search


Avi*_*Avi 17

svn没有附带内置选项.它有一个svn log --xml选项,允许您自己解析输出,并获得有趣的部分.

您可以编写一个脚本来解析它,例如,在Python 2.6中:

import sys
from xml.etree.ElementTree import iterparse, dump

author = sys.argv[1]
iparse = iterparse(sys.stdin, ['start', 'end'])

for event, elem in iparse:
    if event == 'start' and elem.tag == 'log':
        logNode = elem
        break

logentries = (elem for event, elem in iparse
                   if event == 'end' and elem.tag == 'logentry')

for logentry in logentries:
    if logentry.find('author').text == author:
        dump(logentry)
    logNode.remove(logentry)
Run Code Online (Sandbox Code Playgroud)

如果将上述内容保存为svnLogStripByAuthor.py,则可以将其命名为:

svn log --xml other-options | svnLogStripByAuthor.py user
Run Code Online (Sandbox Code Playgroud)

  • 魔术是可能的.Python是Bash. (3认同)

use*_*169 13

因为每个人似乎都倾向于linux(等):这是Windows的等价物:

svn log [SVNPath]|find "USERNAME"
Run Code Online (Sandbox Code Playgroud)


mar*_*cog 8

svn log | grep user
Run Code Online (Sandbox Code Playgroud)

在很大程度上起作用.

或者更准确:

svn log | egrep 'r[0-9]+ \| user \|'
Run Code Online (Sandbox Code Playgroud)


mxg*_*xgr 5

虽然yvoyer的解决方案工作正常,但这里有一个利用SVN的XML输出,解析它xmlstarlet.

svn log --xml | xmlstarlet sel -t -m 'log/logentry' \
  --if "author = '<AUTHOR>'" \
  -v "concat('Revision ', @revision, ' ', date)" -n -v msg -n -n
Run Code Online (Sandbox Code Playgroud)

从这里开始,您可以进入更高级的XML查询.