如何查询我的subversion存储库?

时间:2009-02-20 15:05:11

标签: svn

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

我可以使用某种Subversion查询语言或API吗?

10 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:14)

您可以使用svn log命令生成一个XML文件,其中包含有关所有提交的大量信息,如下所示:

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

您可以使用更多选项来限制修订范围,获取有关rev道具的更多信息,包括合并信息等。

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

答案 2 :(得分:2)

目前没有,没有广泛使用的颠覆查询语言或基于查询的api(好吧,现在看一些人反驳我,我认为这就是网上的生活)。

这意味着您只能将正常svn命令的输出拼接在一起,如

svn info

svn log

我确信像bash或powershell这样的东西至少可行。如果你坚持使用windows批处理,我现在就开始哭了。

答案 3 :(得分:2)

没有存储库查询语言或搜索API。对于复杂查询,您需要一个存储库索引器(如http://supose.soebes.de/wiki/supose)或提交数据库(如http://www.viewvc.org/)。 http://markmail.org/thread/wszzgnrny6o2r7u7还有更多链接。

答案 4 :(得分:2)

您可能需要结帐VoilàSVNOpenGrok

答案 5 :(得分: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"}

答案 6 :(得分:1)

如前所述,svn log / info可以与shell命令结合使用以查找所需内容。或者,您可以直接在C / C ++中使用SVN自己的API来编程处理存储库enties。 SVN有Python绑定。如果Java是您选择的语言,请尝试http://svnkit.com/

答案 7 :(得分:1)

答案 8 :(得分:1)

除了使用Subversion命令行或图形客户端(如TortoiseSVN)查看svn存储库历史记录外,您还可以为Subversion存储库安装高级Web界面。

例如,在VisualSVN Server 3.2及更高版本中,您可以使用基于Web的修订历史记录查看器see the demo here

请参阅the HTML5-based web svn client here的说明。

答案 9 :(得分: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"