目前我只想查找过去X天内未修改的所有文件,但最终我希望能够对我的subversion存储库进行更复杂的查询。
我可以使用某种Subversion查询语言或API吗?
答案 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)
答案 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。
答案 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"