Svn 如何查询我的subversion存储库?

Svn 如何查询我的subversion存储库?,svn,Svn,目前,我只想查找过去X天内未修改的所有文件,但最终我希望能够对我的subversion存储库进行更复杂的查询 有没有某种类型的Subversion查询语言或API我可以使用?目前没有,没有广泛使用的Subversion查询语言或基于查询的API(好吧,现在看看有人反驳我,我想这就是网络生活) 这意味着您只能将普通svn命令的输出拼接在一起,如 svn info 及 我相信bash或powershell之类的东西至少可以让这一切变得可行。如果你被windows批处理卡住了,我现在就哭了。没有存储

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


有没有某种类型的Subversion查询语言或API我可以使用?

目前没有,没有广泛使用的Subversion查询语言或基于查询的API(好吧,现在看看有人反驳我,我想这就是网络生活)

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

svn info


我相信bash或powershell之类的东西至少可以让这一切变得可行。如果你被windows批处理卡住了,我现在就哭了。

没有存储库查询语言或搜索api。对于复杂的查询,您需要一个存储库索引器(like)或提交数据库(like)。有更多链接。

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

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

svn log URL --xml --verbose > commits.xml
您还可以使用其他一些选项来限制修订范围、获取有关修订道具的更多信息,包括合并信息等


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

您可以使用SvnQuery项目(),该项目旨在为执行此类查询提供查询接口。它有一个.NETAPI和一个web前端,提供相同的查询语言。您可以使用运算符、嵌套表达式、通配符、短语和间隙短语执行复杂查询。您请求的运算符(计算当前提交日期与上次提交日期之间的差值)未实现,但由于它是一个开源项目,您可以自愿执行它或为它发布功能请求:-)

您可能希望签出或签出Fisheye。真的很酷


使用Powershell,您可以对日志消息进行一些很好的查询

$data = [xml] (svn log -r "r1:r2" --xml)
$data.log.logentry | where-object {$_.message -match "regex"}
甚至更改了文件(使用一些必要的魔法来避免众所周知的powershell问题)


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

例如,在VisualSVN Server 3.2及更新版本中,您可以使用基于web的修订历史查看器


请参阅的说明。

自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"

哇,真的吗?任何平台的开发者都迫切需要一个有用的工具,但它并不存在?我们的下午和晚上到底在干什么?不是真的,日常需要的大部分信息都可以在标准的命令集中轻松获得。更不寻常的是,想要找到一个有一段时间没有修改过的文件列表。尽管我现在正忙于创建SVNSQL,但该死。特别是--revision范围可以包括一个日期范围:[[svn log--verbose--revision'{2009-01-01}':{2009-02-20}'--xml]]现在,确定哪些没有更改将需要一些后期处理。非常感谢
更改的日期/1000000
。你是唯一提到那件事的人。
$diff = [xml] (svn diff -r "r1:r2" --xml --summarize | %{$_ -replace "item", "item1"})
$diff.diff.paths.path | where-object {$_.item1 -eq "file"}
sqlite3 .svn\wc.db "select changed_revision, datetime((changed_date/1000000),'unixepoch') changed_date, changed_author, repos_path from NODES"