有没有办法获取SVN项目的提交数据,如下所示:
commit1 committer commit_time
commit2 committer commit_time
commit3 committer commit_time
。
。
。
GIT的解决方案是here!需要类似的SVN
答案 0 :(得分:0)
svn log
将为您完成此任务:
C:\Code>svn help log
log: Show the log messages for a set of revision(s) and/or path(s).
usage: 1. log [PATH][@REV]
2. log URL[@REV] [PATH...]
1. Print the log messages for the URL corresponding to PATH
(default: '.'). If specified, REV is the revision in which the
URL is first looked up, and the default revision range is REV:1.
If REV is not specified, the default revision range is BASE:1,
since the URL might not exist in the HEAD revision.
2. Print the log messages for the PATHs (default: '.') under URL.
If specified, REV is the revision in which the URL is first
looked up, and the default revision range is REV:1; otherwise,
the URL is looked up in HEAD, and the default revision range is
HEAD:1.
Multiple '-c' or '-r' options may be specified (but not a
combination of '-c' and '-r' options), and mixing of forward and
reverse ranges is allowed.
With -v, also print all affected paths with each log message.
With -q, don't print the log message body itself (note that this is
compatible with -v).
Each log message is printed just once, even if more than one of the
affected paths for that revision were explicitly requested. Logs
follow copy history by default. Use --stop-on-copy to disable this
behavior, which can be useful for determining branchpoints.
The --depth option is only valid in combination with the --diff option
and limits the scope of the displayed diff to the specified depth.
Examples:
svn log
svn log foo.c
svn log bar.c@42
svn log http://www.example.com/repo/project/foo.c
svn log http://www.example.com/repo/project foo.c bar.c
svn log http://www.example.com/repo/project@50 foo.c bar.c
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range)
A revision argument can be one of:
NUMBER revision number
'{' DATE '}' revision at start of the date
'HEAD' latest in repository
'BASE' base rev of item's working copy
'COMMITTED' last commit at or before BASE
'PREV' revision just before COMMITTED
-q [--quiet] : print nothing, or only summary information
-v [--verbose] : print extra information
-g [--use-merge-history] : use/display additional information from merge
history
-c [--change] ARG : the change made in revision ARG
--targets ARG : pass contents of file ARG as additional args
--stop-on-copy : do not cross copies while traversing history
--incremental : give output suitable for concatenation
--xml : output in XML
-l [--limit] ARG : maximum number of log entries
--with-all-revprops : retrieve all revision properties
--with-no-revprops : retrieve no revision properties
--with-revprop ARG : retrieve revision property ARG
--depth ARG : limit operation by depth ARG ('empty', 'files',
'immediates', or 'infinity')
--diff : produce diff output
--diff-cmd ARG : use ARG as diff command
--internal-diff : override diff-cmd specified in config file
-x [--extensions] ARG : Default: '-u'. When Subversion is invoking an
external diff program, ARG is simply passed along
to the program. But when Subversion is using its
default internal diff implementation, or when
Subversion is displaying blame annotations, ARG
could be any of the following:
-u (--unified):
Output 3 lines of unified context.
-b (--ignore-space-change):
Ignore changes in the amount of white space.
-w (--ignore-all-space):
Ignore all white space.
--ignore-eol-style:
Ignore changes in EOL style.
-p (--show-c-function):
Show C function name in diff output.
Global options:
--username ARG : specify a username ARG
--password ARG : specify a password ARG
--no-auth-cache : do not cache authentication tokens
--non-interactive : do no interactive prompting
--trust-server-cert : accept SSL server certificates from unknown
certificate authorities without prompting (but only
with '--non-interactive')
--config-dir ARG : read user configuration files from directory ARG
--config-option ARG : set user configuration option in the format:
FILE:SECTION:OPTION=[VALUE]
For example:
servers:global:http-library=serf
答案 1 :(得分:0)
正如已经指出的那样,svn log $REPO
将为您提供存储库的完整历史记录。您可以使用-r
指定是要将此前置还是后置或后置:
$ svn -r1:HEAD $REPO # Entire repository in chronological order.
$ svn -rHEAD:1 $REPO # Entire repository in reverse chronological order
这不会为您提供所需的输出。相反,您将不得不使用一些编程来获取此结果并进行解析。这是一个例子:
svn log -r1:HEAD $REPO \
| awk '/^-{72}/ {getline; print $0}' \
| while IFS="|" read revision author date junk
do
echo "Author = '$author' Revision = '$revision' Date = '$date'"
done
这将打印出来:
Author = ' Bob ' Revision = 'r1233 ' Date = ' 2013-11-08 09:18:17 -0500 (Fri, 08 Nov 2013) '
请注意Author和Date周围的额外空格以及Revision如何从r
开始并具有尾随空格。加上日期很长很复杂。但是,清理数据并打印出您想要的报告应该不会太难。
您可以做的另一件事是将--xml
参数添加到svn log
命令。这将为您提供基于XML的输出,可以通过Perl,PHP,Ruby或Python轻松解析:
<?xml version="1.0" encoding="UTF-8"?>
<log>
<logentry
revision="1">
<author>Bob</author>
<date>2013-11-13T19:08:19.154858Z</date>
<msg>What I was doing</msg>
</logentry>
<logentry.../>
</log>
而且,Python和Perl的模块也能以更实用的方式提取这些信息,因此您不必使用XML输出。