在特定日期获取用户活动的svn日志
要显示在第10名的条目:
svn log -r '{2010-12-10}:{2010-12-11}'|sed -n '1p; 2,/^-/d; /username/,/^-/p'
的SVN命令获取提交在该日期范围
击穿sed命令的:
-
-n
- 不要自动打印。 -
1p
- 打印第一行(---标题)。 -
2,/^-/d;
- 删除从第二个到结束---标题的所有内容。这删除了第一个条目,IIRC是在一天开始时的午夜时分的最近一次提交(即,它实际上不在该范围内,并且可能在过去很长)。 -
/username/,/^-/p
- 打印一切从用户名开始(一个正则表达式匹配你感兴趣的用户)收盘---头部(这个动作反复)
@pyfunc它为我工作。 'grep'的问题在于你只能得到每个日志的第一行 – ajitam 2010-12-10 09:48:16
谁对此投了票?有用。我知道,因为我(发布前)和ajitam都对它进行了测试。它可能需要GNU sed。 – 2010-12-10 09:50:06
@ajitam:没关系。我的理解是基于你提供的。我相信你不想要一个饼干切割机解决方案。由于你没有提供任何细节。我知道你正在寻找在特定日期提交。这是我提供的。从那里建立就足够了。请参阅AgentConundrum的答案。在提供部分答案时,我得到两个否定的选票。非常有趣。 Matthew Flaschen的回答甚至不适合我。所以我想grep和休息需要专门建立。 AgentConundrum的答案更为通用,符合我的建议。 – pyfunc 2010-12-10 09:53:27
假设你是一个Linux系统上,你可以做这样的事情:
svn log -r {YYYY-MM-DD}:{YYYY-MM-DD} | grep username | cut -d " " -f 1 | tail -n +2 | while read revision; do svn log -r $revision; done
这是什么东西做的是使用svn日志来获得所有日志某一天,然后切割输出,使得它仅仅是一个版本号的列表。 [编辑:添加tail -n +2
以截断第一次修订 - 正如@Matthew所述,第一行将是{that_day}
之前的最新修订版] while循环然后遍历修订号的每一行,并将其传递到svn log
。另外,请记住{YYYY-MM-DD}指的是当天的开始的午夜,因此要运行一整天,您应该运行它以获得{that_day}:{the_following_day}
。
希望有帮助!
(另外,抱歉的混乱提早了--username
。我以前从来没有使用它,因为我的本地的svn只有一个用户(我),它看上去像它的工作,当它真不是。)
不幸的是,这与pyfunc的答案有相同的日期问题。它包含* *之前的提交*'that_day'。而且,这样做效率不高,因为每次调用svn日志都需要一个进程,一个网络连接以及一个可能的密码提示。 – 2010-12-10 09:57:29
@Matthew:感谢您指出“最后一次提交”问题。我更新了我的解决方案。你绝对正确的认为,这会吸引网络或者使用未缓存的凭证。 – AgentConundrum 2010-12-10 10:08:12
@Agent,+1,感谢您的更新。你说得对,尽管存在性能问题,但它更具可读性(尤其是如果你不熟悉sed)。 – 2010-12-10 10:13:52
如果你在Linux上的最佳解决方案,让整个日期的日志如下:
svn log -r {start date}:{end date} -v | sed -n ‘/username/,/—–$/ p’
如果您想要的用户名的基础上,指定日期范围内,然后与检索SVN日志你需要使用svn log -r {startDate}:{endDate}
这是管道sed
用户命令我。
svn log --verbose --search user_name --revision {YYYY-MM-DD}:{YYYY-MM-DD}
任何平台
如果你在Windows上,TortoiseSVN的,您可以通过过滤其日志输出(除其他事项外)的用户名。如果你使用的是Unix,我毫不怀疑有一种方法可以编写一个脚本,用于在'svn log -revision {startdate}:{enddate}中为每个版本号执行'svn log -rNNNNN'。 grep ajitam',尽管我在shell脚本方面做得太弱了。 – sbi 2010-12-10 09:16:53