检查svn工作副本是否有更改的最快方法是什么



如果工作副本被修改(提交时忽略变更集除外),我想在构建时将信息添加到程序集,但我担心使用SharpSVN检查所有更改可能会在拥有1000多个文件的100MB工作副本中减慢构建速度。因此,什么是只获取存在未限制和/或未记录更改的信息的最快方法?

如果你只需要结果:修改的和未修改的,你可以做这样的C#代码:

// using SharpSvn;
bool foundModification = false;
using (SvnClient client = new SvnClient()
{
   client.Status(@"C:myworkingcopy",
                 delegate(object sender, SvnStatusEventArgs e)
                 {
                    foundModification = true;
                    e.Cancel = true;
                 });
}

这是查找工作副本中是否有实际更改所需的绝对最小值,并在找到第一个结果时停止。

SubWCRev和sversion使用类似的方法,但在wc.db中进行一些额外的检查(假设Subversion 1.7或更新版本)。

您可能希望稍微扩展一下委托以跳过某些类型的更改。(Changelist可作为SvnStatusEventArgs对象上的属性使用)

如果您只需要一个关于是否有本地修改的"是/否",并且您安装了TortoiseSVN,则可以使用SubWCRev:

SubWCRev是Windows控制台程序,可用于读取Subversion工作副本的状态,并可选择在模板文件中执行关键字替换。

但是,如果您这样调用它,则更符合您的需求:

subwcrev C:yourwcpath -n

它只是在工作副本中查找更改,如果发现任何更改,就会返回错误代码(根据文档,它是7)。例如,从Powershell提示符:

> subwcrev C:yourwcpath -n
SubWCRev: 'C:yourwcpath'
Working copy has local modifications!
> $LASTEXITCODE
7

使用它可能比解析svn status的输出更容易。

我没有使用过SharpSVN。然而,Subversion本身在检测更改方面相当快,尤其是在1.7及更新版本中。我们有包含10000个或更多文件的项目,而Subversion只需几秒钟就可以找到更改并列出所有文件。NSvn(它是.NET子版本库的名称)应该能很快完成这项任务。如果没有,请尝试在PowerShell中使用Subversion命令行。

一个奇怪的问题:为什么你的作品这么大?你在那里签入了所有的.NET第三方库吗?如果是这样的话,你应该看看NuGet。NuGet是.NET对Maven的回应。Maven是一个Java依赖关系管理系统。

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

如果你没有使用NuGet,我建议你看看它。它可以与你当前的Microsoft项目文件配合使用,所以你不必彻底检查你当前的构建系统。

我认为svn status就是您想要的:

> svn status
M       authauth.c
M       authauth_spnego.c

相关内容

最新更新