我该如何查询我的Subversion仓库?

19

目前我只想查找最近X天未被修改的所有文件,但最终我希望能对我的Subversion存储库进行更复杂的查询。

是否有某种Subversion查询语言或API可用?

10个回答

16

你可以使用SvnQuery项目(http://svnquery.tigris.org),该项目旨在为此类查询提供查询接口。它具有.NET API和Web前端,提供相同的查询语言。您可以使用运算符、嵌套表达式、通配符、短语和间隔短语进行复杂的查询。您要求的运算符计算现在和上次提交日期之间的差异尚未实现,但由于它是一个开源项目,您可以自愿承担此任务或发布功能请求以实现它 :-)


14

您可以使用svn log命令生成一个包含所有提交信息的XML文件,格式如下:

svn log URL --xml --verbose > commits.xml

有一些其他选项可以用来限制修订版本范围、获取有关修订属性的更多信息、包括合并信息等。

问题变成了“如何对XML文档的内容执行查询”,这比使用现有的SVN API 更容易。例如,在C#中,您可以对XML执行LINQ查询


1
特别地,--revision范围可以包括日期范围:[[ svn log --verbose --revision '{2009-01-01}':'{2009-02-20}' --xml ]] 现在,确定未更改的内容将需要一些后处理。 - Phil Hord
不错的提示。在SmartSVN中,您可以使用日志->导出->XML或HTML等功能。 - user5248982

2
使用 Powershell 可以对日志消息进行一些不错的查询。
$data = [xml] (svn log -r "r1:r2" --xml)
$data.log.logentry | where-object {$_.message -match "regex"}

甚至可以在文件更改时运行(需要一些必要的魔法来避免已知的PowerShell问题)

$diff = [xml] (svn diff -r "r1:r2" --xml --summarize | %{$_ -replace "item", "item1"})
$diff.diff.paths.path | where-object {$_.item1 -eq "file"}

2

目前还没有广泛使用的Subversion查询语言或基于查询的API(好吧,现在看到有人与我矛盾了,这就是网络生活吧)。

这意味着您只能将普通SVN命令的输出拼接在一起,例如:

svn info

而且。
svn log

我相信像bash或powershell这样的工具可以使这个过程至少变得可行。如果你被限制使用windows批处理,那么我建议你现在就开始哭泣吧。

2
哇,真的吗?开发人员跨平台需要一个有用的工具,但它不存在?我们在下午和晚上都在干什么呢? - George Mauer
1
其实并不是这样,大部分日常所需的信息都可以在标准命令集中轻松找到。想要找到一份长时间未修改的文件列表反而更为罕见。尽管我现在脑海里正在忙着构思SVNSQL,真是让人头疼。 - Jim T

2

2

1
自从1.7 SVN版本以后,工作副本在.svn目录下有一个wc.db文件。它是一个基本的sqlite数据库,所以查询起来相当容易。
您应该确保您的工作副本是最新的。如果您要做的事情不仅仅是快速简单的选择,最好复制该文件,而不是冒着破坏它的风险。
更改日期基于Unix纪元。例如:
sqlite3 .svn\wc.db "select changed_revision, datetime((changed_date/1000000),'unixepoch') changed_date, changed_author, repos_path from NODES"

非常感谢您提到了 changed_date/1000000。您是唯一一个提到这个的人。 - steven

1
除了使用Subversion命令行或图形客户端(如TortoiseSVN)查看svn存储库历史记录外,您还可以安装Subversion repos的高级Web界面。
例如,在VisualSVN Server 3.2及更高版本中,您可以使用基于Web的版本历史记录查看器,在此处查看演示
请参阅基于HTML5的Web SVN客户端的说明


1
如前所述,可以将svn log/info与shell命令结合使用以查找所需内容。另外,您还可以直接使用C/C++中的SVN API来以编程方式处理存储库条目。SVN具有Python绑定。如果Java是您的首选语言,请尝试使用http://svnkit.com/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接