【发布时间】:2010-10-26 12:06:23
【问题描述】:
您好,我使用 C# 和 SharpSvn 库。我想在使用 SvnClient.Add 添加文件之前检查文件是否受源代码控制。当我在已经在 SVN 下的文件上执行此操作时,我得到错误:“已经在版本控制之下”。
【问题讨论】:
您好,我使用 C# 和 SharpSvn 库。我想在使用 SvnClient.Add 添加文件之前检查文件是否受源代码控制。当我在已经在 SVN 下的文件上执行此操作时,我得到错误:“已经在版本控制之下”。
【问题讨论】:
这很好地展示了如何使用状态来做到这一点
using(SvnClient client = new SvnClient())
{
SvnStatusArgs sa = new SvnStatusArgs();
sa.Depth = SvnDepth.Empty; // Adjust this to check direct files, or (recursive) directories etc
Collection<SvnStatusEventArgs> statuses;
client.GetStatus("c:\\somefile.txt", sa, out statuses);
Assert.That(statuses.Count, Is.EqualTo(1));
Assert.That(SvnStatus.NotVersioned, Is.EqualTo(statuses[0].LocalContentStatus));
}
【讨论】:
.Status() 将在文件可能已被修改的情况下进行文件比较,因此最坏的情况是,如果仅修改了 2 GByte 文件的最后一个字节,它可能几乎读取 2*2 GByte 以确定这。使用.Info(),您确信这永远不会发生。
如果您只想知道文件是否受源代码控制,您可以使用.Info() / .GetInfo()。该方法通常更快,因为它不必检查文件自检出后是否已更改。
【讨论】:
.Status() 将在文件可能已被修改的情况下进行文件比较,因此最坏的情况是,如果仅修改了 2 GByte 文件的最后一个字节,它可能几乎读取 2*2 GByte 以确定这。使用.Info(),您确信这永远不会发生。