使用SharpSVN添加文件

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()

在添加之前,但没有效果。

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

提前感谢!

Jan


1
你有没有尝试在SharpSVN讨论版上提问?那里可能会得到更好的答复。 - hao
与此同时,我查看了单元测试代码:http://sharpsvn.open.collab.net/source/browse/sharpsvn/trunk/src/SharpSvn.Tests/Commands/AddTests.csTestAddDirectoryRecursively做了类似的事情,但是在WorkingcopyPath下添加了一个新的dir1和其中的所有内容。我想添加WorkingCopyPath本身下的所有内容。 - jan
3个回答

5

很棒的工具Malcom,完全符合其描述。+1 - Chris Masterton

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

1

我认为你不应该在路径后缀加上逗号“,”。请尝试:

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

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

您提供的代码告诉我:“C:\temp”不在版本控制之下。这是正确的。但是并没有帮助到我。我会尽快在论坛上发布。谢谢! - jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接