目前我只想查找所有在過去X天內未被修改的文件,但最終我希望能夠對我的Subversion存儲庫進行更復雜的查詢。如何查詢我的Subversion存儲庫?
是否有某種或我可以使用API的顛覆查詢語言?
目前我只想查找所有在過去X天內未被修改的文件,但最終我希望能夠對我的Subversion存儲庫進行更復雜的查詢。如何查詢我的Subversion存儲庫?
是否有某種或我可以使用API的顛覆查詢語言?
可以使用svn log命令生成一個XML文件,有很多的所有信息提交這樣的:
svn log URL --xml --verbose > commits.xml
有一些更多的選擇,你可以玩限制修訂範圍,獲得更多關於rev道具的信息,包括合併信息等。
然後問題就變成了「如何對XML文檔的內容執行查詢」,這比使用現有的SVN API。例如,在C#中,您可以執行LINQ queries on XML。
目前沒有,也沒有顛覆查詢語言或查詢基於API這是廣泛使用的(好了,現在看着別人反駁我,這是在網絡上,我想生活)。
這意味着你只限於拼接在一起的輸出從正常的svn命令,如
svn info
和
svn log
我敢肯定,像bash或PowerShell中至少可以使這一可行。如果你遇到Windows批處理,我現在開始哭泣。
沒有存儲庫查詢語言或搜索api。對於複雜的查詢,您需要存儲庫索引器(如http://supose.soebes.de/wiki/supose)或提交數據庫(如http://www.viewvc.org/)。 http://markmail.org/thread/wszzgnrny6o2r7u7有更多的鏈接。
如前所述,SVN的日誌/信息可與外殼相結合命令來找到你想要的東西。或者,您可以直接在C/C++中使用SVN自己的API來編程處理存儲庫實體。 SVN有Python綁定。如果Java是您所選擇的語言,儘量http://svnkit.com/
你可以使用它有意向提供做這樣的查詢的查詢接口SvnQuery項目(http://svnquery.tigris.org)。它有一個.NET API和一個Web前端,提供相同的查詢語言。您可以使用運算符,嵌套表達式,通配符,短語和缺口短語來執行復雜的查詢。你問的操作,計算從現在到最後提交日期之間的區別,不落實,但因爲它是一個開源項目,你可以自願做或張貼:-)
使用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"}
除了使用Subversion命令行或諸如TortoiseSVN之類的圖形客戶端來查看svn存儲庫歷史記錄外,還可以安裝高級Web界面的Subversion回購。
例如,在VisualSVN Server 3.2及更新的版本中,您可以使用基於Web的修訂歷史查看器see the demo here。
由於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"
哇,真的嗎?對於任何平臺上的開發人員都非常需要一個有用的工具,並且它不存在?我們在下午和晚上做什麼? – 2009-02-20 15:43:09
並非如此,大部分日常需要的信息都可以在標準命令集中輕鬆獲得。想要查找一段時間未修改的文件列表更爲不尋常。儘管我現在忙於創建SVNSQL,但是該死。 – 2009-02-20 15:50:37
Linq2Svn - 該死的聽起來不錯 – 2009-02-20 16:02:41