获取Subversion中最后N次提交的文件列表

时间:2014-06-12 02:57:53

标签: shell svn version-control

是否可以在Subversion中获取最后N次提交的文件列表?

我想为Subversion存储库中的文件运行图像优化任务,并且我不想运行整个文件。

3 个答案:

答案 0 :(得分:3)

要获取最后N次提交,请使用--limit-l标记svn log。或者,您也可以按修订号和/或按日期限制日志条目。

要更改文件,您需要使用-v(或--verbose)标记。

要取消日志文字,您需要使用-q(或--quiet)标记。

将所有内容放在一起,以获取(例如)自2014年5月初以来更改的所有文件(易于解析的格式),您可以这样做:

svn log --quiet --verbose --revision {2014-05-01}:HEAD
svn log -q -v -r {2014-05-01}:HEAD

或者获取最近10次提交的相同信息,无论它们何时发生:

svn log --quiet --verbose --limit 10
svn log -q -v -l 10

答案 1 :(得分:1)

没有简单的单一Subversion命令可以为您提供该信息。

这里有一些松散的

  • 您的意思是您所在目录(项目)的最后几次修订,还是整个存储库的修订。如果您正在谈论整个回购,您可以获得最新版本,然后减去您想要的数字。如果你在谈论个别项目,那就更难了。

  • 我认为你需要一个不包含重复项的列表。

  • 添加或删除的文件怎么样?你想怎么算这些?

这并不像看起来那么困难,但你必须编写自己的脚本才能做到这一点。 svn log采用--xml参数,并以XML格式返回日志。格式如下:

$ svn log -v --xml $REPO

<?xml version="1.0" encoding="UTF-8"?>
<log>
<logentry
    revision=...>
<author>...</author>
<date>...</date>
<paths>
<path
   ....
   ....
   action=".">...name of file...</path>
<path ...
</paths>
<msg>.....</msg>
</logentry>
<logentry
   ....
   ....

即使您不解析XML本身,您也可以轻松使用XML输出来获取所需的信息。计算<logentry行的数量,直到获得所需的数字或条目。使用<path标记 element, and when you see the closing&gt; , you know that the rest of the line till the`的开头是文件的名称。将这些文件存储在由文件名键控的哈希变量中。

Python或Perl中的脚本应该很容易做到。

答案 2 :(得分:1)

你标记了你的问题&#34; shell&#34;所以很有可能你不在Windows上,但是在你有机会的情况下,人们几乎可以在一行PowerShell中做任何事情(替换你的#34; n&#34;以及&#34; 99&#34 ;在这个食谱中):

PS> Get-SvnLog |
Select -First 99 -ExpandProperty Paths |
% { ([xml]$_).SelectNodes("//path/text()").Value } |
Sort -Unique

您可以在我的open source bookshelf中查看Get-SvnLog的API,其中包含20多个您可以获得的其他报告示例。打开PowerShell&#34;书&#34;然后去SvnTools。下载代码here