2009-02-20 105 views

回答

14

可以使用svn log命令生成一個XML文件,有很多的所有信息提交這樣的:

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

有一些更多的選擇,你可以玩限制修訂範圍,獲得更多關於rev道具的信息,包括合併信息等。

然後問題就變成了「如何對XML文檔的內容執行查詢」,這比使用現有的SVN API。例如,在C#中,您可以執行LINQ queries on XML

2

目前沒有,也沒有顛覆查詢語言或查詢基於API這是廣泛使用的(好了,現在看着別人反駁我,這是在網絡上,我想生活)。

這意味着你只限於拼接在一起的輸出從正常的svn命令,如

svn info 

svn log 

我敢肯定,像bash或PowerShell中至少可以使這一可行。如果你遇到Windows批處理,我現在開始哭泣。

+2

哇,真的嗎?對於任何平臺上的開發人員都非常需要一個有用的工具,並且它不存在?我們在下午和晚上做什麼? – 2009-02-20 15:43:09

+1

並非如此,大部分日常需要的信息都可以在標準命令集中輕鬆獲得。想要查找一段時間未修改的文件列表更爲不尋常。儘管我現在忙於創建SVNSQL,但是該死。 – 2009-02-20 15:50:37

+1

Linq2Svn - 該死的聽起來不錯 – 2009-02-20 16:02:41

1

如前所述,SVN的日誌/信息可與外殼相結合命令來找到你想要的東西。或者,您可以直接在C/C++中使用SVN自己的API來編程處理存儲庫實體。 SVN有Python綁定。如果Java是您所選擇的語言,儘量http://svnkit.com/

16

你可以使用它有意向提供做這樣的查詢的查詢接口SvnQuery項目(http://svnquery.tigris.org)。它有一個.NET API和一個Web前端,提供相同的查詢語言。您可以使用運算符,嵌套表達式,通配符,短語和缺口短語來執行復雜的查詢。你問的操作,計算從現在到最後提交日期之間的區別,不落實,但因爲它是一個開源項目,你可以自願做或張貼:-)

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"} 
1

除了使用Subversion命令行或諸如TortoiseSVN之類的圖形客戶端來查看svn存儲庫歷史記錄外,還可以安裝高級Web界面的Subversion回購。

例如,在VisualSVN Server 3.2及更新的版本中,您可以使用基於Web的修訂歷史查看器see the demo here

請參閱the HTML5-based web svn client here的說明。

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" 
相關問題