2015-04-03 104 views
2

如果修改了工作副本(除了ignore-on-commit changeset之外),我想在build上添加信息,但是恐怕檢查使用SharpSVN的所有更改可能會減慢100MB工作副本的構建速度擁有1000多個文件。因此 - 什麼是獲得只有有沒有未完成和/或非持續更改的信息的最快方法?什麼是檢查svn工作副本是否有變化的最快方法?

回答

3

如果你只需要結果:修改VS未修改你可以做這樣的事情C#代碼:

// using SharpSvn; 

bool foundModification = false; 
using (SvnClient client = new SvnClient() 
{ 
    client.Status(@"C:\my\working\copy", 
       delegate(object sender, SvnStatusEventArgs e) 
       { 
        foundModification = true; 
        e.Cancel = true; 
       }); 
} 

這確實+ - 查找工作副本中是否存在實際更改並在找到第一個結果時停止的絕對最小值。

SubWCRev和svnversion使用類似的方法,但在wc.db中做了一些額外的檢查(假設Subversion 1.7或更高版本)。

您可能想要擴展委託以略過某些更改。 (Changelist可作爲SvnStatusEventArgs對象的屬性)

2

我還沒有與SharpSVN合作過。然而,Subversion本身在檢測變化方面相當快速 - 特別是1.7版本和更新版本。我們有10,000個或更多文件的項目,而Subversion只需幾秒鐘就可以找到所需的更改並列出所有文件。 NSvn(這是.NET Subversion庫的名稱)在執行此任務時應該相當快。如果沒有,請嘗試在PowerShell中使用Subversion命令行。

一個奇怪的問題:爲什麼你的工作副本如此之大?你有沒有在那裏檢查所有的.NET第三方庫?如果是這樣,你應該看看NuGet。 NuGet是.NET對Maven的回答。 Maven是Java的依賴管理系統。

而不是將第三方Java庫添加到您的存儲庫中,而是使用Maven的pom.xml文件來描述您所需的依賴關係。然後,Maven從世界各地的各種Maven倉庫中提取這些庫。結果是較小的源代碼庫,更容易維護。更小的工作副本,更快的結賬,而不是神祕的第三方庫(這是從哪裏來的?這是什麼版本?),你有你的依賴關係的描述(我正在使用這個庫的1.2版本來自這個項目) 。

如果你不使用NuGet,我建議你看看它。它適用於您當前的Microsoft項目文件,因此您不必檢修當前的構建系統。

+0

好吧,我將檢查svn狀態有多快能工作 - 我認爲狀態會花費相當多的磁盤工作,這對構建會很痛苦。工作副本是相當大的,因爲它是一個使用MVC Web應用程序(以及大量資源,圖像等)的多項目解決方案,代碼與資源相比並不佔用太多。是的,我們使用NuGet來處理所有的軟件包,謝謝你對這個可能的問題的詳細瞭解:) – 2015-04-03 15:02:25

+0

從未聽說過NSvn,你有鏈接嗎? [SharpSvn](https://sharpsvn.open.collab.net/)是我見過的唯一(成熟的).NET SVN綁定。 – 2015-04-03 15:18:15

+0

NSvn是AnkhSVN舊的Subversion集成庫。由於AnkhSVN 2.0(閱讀:大約6年前),該庫已被SharpSvn所取代,並且NSvn不再更新。 – 2015-04-04 13:26:53

3

如果你只需要一個「是/否」是否有局部修改,你必須安裝TortoiseSVN,您可以使用SubWCRev

SubWCRev是可以用來讀取Windows控制檯程序Subversion工作副本的狀態以及可選地在模板文件中執行關鍵字替換。

但更根據您的要求,如果你調用它是這樣的:

subwcrev C:\your\wc\path -n 

它只是看起來在工作副本的變化,並返回一個錯誤代碼(它根據文檔的7)如有被發現。例如,從Powershell命令提示符:

> subwcrev C:\your\wc\path -n 
SubWCRev: 'C:\your\wc\path' 
Working copy has local modifications! 

> $LASTEXITCODE 
7 

使用這可能是比分析的svn status輸出更容易。

0

我覺得svn status是你在找什麼:

> svn status 
M  auth\auth.c 
M  auth\auth_spnego.c 
相關問題