问题 如何在SharpSvn中检查文件是否受源代码控制?


嗨,我使用C#和SharpSvn库。我想在使用SvnClient.Add添加文件之前检查文件是否处于源代码管理之下。当我在已经在SVN下的文件上进行比我得到错误:“已经在版本控制下”。


1105
2018-05-15 13:33


起源



答案:


这很好地演示了如何使用状态来完成它

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));
}

10
2018-05-19 21:22



如果您只需要知道文件是否受源代码控制而不是文件被修改,那么使用.GetInfo()检查会更便宜(io-wise)。 - Bert Huijben
.Status() 如果文件可能已被修改,将进行文件比较,因此最坏的情况是只修改2 GByte文件的最后一个字节,它几乎可以读取2 * 2 GByte来确定这一点。同 .Info() 你确定这永远不会发生。 - Bert Huijben


答案:


这很好地演示了如何使用状态来完成它

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));
}

10
2018-05-19 21:22



如果您只需要知道文件是否受源代码控制而不是文件被修改,那么使用.GetInfo()检查会更便宜(io-wise)。 - Bert Huijben
.Status() 如果文件可能已被修改,将进行文件比较,因此最坏的情况是只修改2 GByte文件的最后一个字节,它几乎可以读取2 * 2 GByte来确定这一点。同 .Info() 你确定这永远不会发生。 - Bert Huijben


如果您只想知道文件是否受源代码管理,您可以使用 .Info() / .GetInfo()。该方法通常更快,因为它不必检查文件自签出后是否已更改。


6
2017-08-09 21:35



.Status() 如果文件可能已被修改,将进行文件比较,因此最坏的情况是只修改2 GByte文件的最后一个字节,它几乎可以读取2 * 2 GByte来确定这一点。同 .Info() 你确定这永远不会发生。 - Bert Huijben