检查svn工作副本是否有变化的最快方法是什么?

时间:2015-04-03 14:05:49

标签: c# powershell svn sharpsvn

如果修改了工作副本,我想在构建时向程序集添加信息(除了来自ignore-on-commit变更集),但我担心使用SharpSVN检查所有更改可能会减慢100MB工作中的构建速度复制1000多个文件。因此 - 什么是有关未提及和/或未分阶段更改的信息的最快方法?

4 个答案:

答案 0 :(得分: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的输出更容易。

答案 1 :(得分: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 :(得分:2)

我还没与SharpSVN合作过。但是,Subversion本身在检测更改方面相当快 - 特别是对于1.7及更高版本。我们有10,000个或更多文件的项目,Subversion只需几秒钟即可找到更改并列出所有文件。 NSvn(这是.NET Subversion库的名称)在执行此任务时应该相当快。如果没有,请尝试在PowerShell中使用Subversion命令行。

一个奇怪的问题:为什么你的工作副本如此之大?你在那里检查了所有的.NET第三方库吗?如果是这样,你应该看看NuGet。 NuGet是.NET对Maven的回答。 Maven是Java的依赖管理系统。

您可以使用Maven的pom.xml文件来描述您需要的依赖项,而不是将第三方Java库添加到您的存储库中。然后,Maven从世界各地的各种Maven存储库中获取这些库。结果是较小的源存储库,更易于维护。较小的工作副本,更快的签出,而不是神秘的第三方库(这是从哪里来的?这是什么版本?),你有一个你的依赖的描述(我使用这个库的版本1.2' ;来自这个项目)。

如果你不使用NuGet,我建议你看一下。它适用于您当前的Microsoft项目文件,因此您无需彻底检查当前的构建系统。

答案 3 :(得分:0)

我认为svn status是您正在寻找的:

> svn status
M       auth\auth.c
M       auth\auth_spnego.c