5

我想使用 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()

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

由于文档相当模糊;),我想知道这里是否有人知道答案。

提前致谢!

4

3 回答 3

5

使用我的工具http://svncompletesync.codeplex.com/或将其作为示例。它完全符合您的需要。

于 2010-06-07T23:00:11.867 回答
2

我尝试了 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);
于 2014-12-02T18:32:14.067 回答
1

我认为你不应该在路径后面加上','。尝试:

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

请在 SharpSvn 讨论板/邮件列表上进一步讨论这个问题,因为您看到的行为可能是一个错误。

于 2009-06-08T22:05:29.053 回答