我想使用SharpSVN将目录下的所有未转移文件添加到SVN。

我首先在命令行上尝试了常规的SVN命令:

C:\temp\CheckoutDir> svn status -v

我看到了所有已签入的所有分组,所有标有“?”的新文件,没有“ L”锁定指示

C:\temp\CheckoutDir> svn add . --force

这会导致已在版本控制下本身的所有新文件中的所有新文件。

我想使用SharpSVN做同样的事情。我将一些额外的文件复制到同一目录中并运行此代码:

...
using ( SharpSvn.SvnClient svn = new SvnClient() )
{
    SvnAddArgs saa = new SvnAddArgs();
    saa.Force = true;
    saa.Depth = SvnDepth.Infinity;
    try
    {
        svn.Add(@"C:\temp\CheckoutDir\." , saa);
    }
    catch (SvnException exc)
    {
        Log(@"SVN Exception: " + exc.Message + " - " + exc.File);
    }
}

但是提出了一个svnexception:

  • svnexception.message:工作副本'c: temp checkoutdir'锁定
  • svnexception.file:.. .. .. subversion libsvn_wc lock.c”

没有其他SVNClient实例在我的代码中运行,我也尝试调用

svn.cleanup()

就在添加之前,但无济于事。

自从 文档 很模糊;)我想知道这里是否有人知道答案。

提前致谢!

有帮助吗?

解决方案

使用这个我的工具 http://svncompletesync.codeplex.com/ 或以样本为样本。它确实可以完成您需要的工作。

其他提示

我尝试了Malcolm的工具,但是现在看起来已经有几年了,但是现在看来它的源代码,看起来这实际上是您所需的一切来使本地检查的文件夹与该文件夹同步一位在SVN中:

string _localCheckoutPath = @"C:\temp\CheckoutDir\";
SvnClient client = new SvnClient();

Collection<SvnStatusEventArgs> changedFiles = new Collection<SvnStatusEventArgs>();
client.GetStatus(_localCheckoutPath, out changedFiles);

//delete files from subversion that are not in filesystem
//add files to suversion , that are new in filesystem

foreach (SvnStatusEventArgs changedFile in changedFiles)
{
    if (changedFile.LocalContentStatus == SvnStatus.Missing)
    {
        client.Delete(changedFile.Path);
    }
    if (changedFile.LocalContentStatus == SvnStatus.NotVersioned)
    {
        client.Add(changedFile.Path);
    }
}

SvnCommitArgs ca = new SvnCommitArgs();
ca.LogMessage = "Some message...";

client.Commit(_localCheckoutPath, ca);

我认为您不应该用'尝试:

svn.Add(@"C:\temp\CheckoutDir" , saa);

请在SharpSVN讨论板/邮寄列表中进一步讨论此问题,因为您看到的行为可能是一个错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top