检查 svn 工作副本是否有更改的最快方法是什么?
What is the quickest way to check if an svn working copy has changes?
如果工作副本被修改(来自提交时忽略的变更集除外),我想在构建时向程序集添加信息,但我担心使用 SharpSVN 检查所有更改可能会减慢构建速度100MB 工作副本,包含 1000 多个文件。因此 - 获取 仅 未提交 and/or 未暂存更改的信息的最快方法是什么?
我没有使用过 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 项目文件,因此您无需彻底检查当前的构建系统。
如果你只需要一个"yes/no"是否有局部修改而你有TortoiseSVN installed, you can use SubWCRev:
SubWCRev is Windows console program which can be used to read the status of a Subversion working copy and optionally perform keyword substitution in a template file.
但更符合您的要求,如果您这样调用它:
subwcrev C:\your\wc\path -n
它只是查找工作副本中的更改,如果发现任何错误代码 returns 错误代码(根据文档为 7)。例如,从 Powershell 提示:
> subwcrev C:\your\wc\path -n
SubWCRev: 'C:\your\wc\path'
Working copy has local modifications!
> $LASTEXITCODE
7
使用它可能比解析 svn status
.
的输出更容易
我认为 svn status
是您要查找的内容:
> svn status
M auth\auth.c
M auth\auth_spnego.c
如果您只需要结果:已修改与未修改,您可以执行类似以下 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 或更新版本)。
您可能希望稍微扩展委托以跳过某些类型的更改。 (更改列表作为 SvnStatusEventArgs 对象上的 属性 提供)
如果工作副本被修改(来自提交时忽略的变更集除外),我想在构建时向程序集添加信息,但我担心使用 SharpSVN 检查所有更改可能会减慢构建速度100MB 工作副本,包含 1000 多个文件。因此 - 获取 仅 未提交 and/or 未暂存更改的信息的最快方法是什么?
我没有使用过 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 项目文件,因此您无需彻底检查当前的构建系统。
如果你只需要一个"yes/no"是否有局部修改而你有TortoiseSVN installed, you can use SubWCRev:
SubWCRev is Windows console program which can be used to read the status of a Subversion working copy and optionally perform keyword substitution in a template file.
但更符合您的要求,如果您这样调用它:
subwcrev C:\your\wc\path -n
它只是查找工作副本中的更改,如果发现任何错误代码 returns 错误代码(根据文档为 7)。例如,从 Powershell 提示:
> subwcrev C:\your\wc\path -n
SubWCRev: 'C:\your\wc\path'
Working copy has local modifications!
> $LASTEXITCODE
7
使用它可能比解析 svn status
.
我认为 svn status
是您要查找的内容:
> svn status
M auth\auth.c
M auth\auth_spnego.c
如果您只需要结果:已修改与未修改,您可以执行类似以下 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 或更新版本)。
您可能希望稍微扩展委托以跳过某些类型的更改。 (更改列表作为 SvnStatusEventArgs 对象上的 属性 提供)