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