如何使用SharpSVN以递归方式还原工作副本中的更改?

时间:2017-04-14 01:29:20

标签: c# svn sharpsvn

我有一个项目会自动从一个分支到另一个分支的用户选择的修订列表进行合并和提交。如果发生合并冲突,则中止该过程并恢复工作副本。

但是,当我再次尝试并选择通常不会在原始工作副本上造成冲突的修订时,我收到以下错误:

  

合并失败:SharpSvn.SvnWorkingCopyException:无法合并到冲突的节点'C:\ SVN \ MyProject \ MyBranch \ ProjectDirectory \ SubDirectory \ conflicted-file.cs'

即使我对工作副本进行了还原,它也只会恢复svn:mergeinfo属性,但不会恢复其中的文件(冲突与否,旧文件仍然存在)。是不是递归还原?我没有看到这样做的选择。

这是我到目前为止所尝试的内容:

using (var client = new SvnClient())
{
    // [Authentication code goes here...]
    var targetPath = $@"{_svnLocalRoot}\{project}\{branch}\";

    // Clean Up
    var cleanupArgs = new SvnCleanUpArgs()
    {
        BreakLocks = true,
        ClearDavCache = true,
        VacuumPristines = true,
        FixTimestamps = true
    };
    client.CleanUp(targetPath, cleanupArgs);

    // Revert
    var revertArgs = new SvnRevertArgs()
    {
        Depth = SvnDepth.Infinity,
        ClearChangelists = true
    };
    client.Revert(targetPath);

    // Update
    var updateArgs = new SvnUpdateArgs()
    {
        Depth = SvnDepth.Infinity
    };
    client.Update(targetPath, updateArgs);

    // [Merge and commit code goes here...]
}

如果没有删除整个工作目录并执行签出(这需要很长时间),我需要做些什么才能将我的工作副本恢复到原始状态而没有冲突和最新代码?

我目前正在使用SharpSvn.1.9-x64版本1.9005.3940.224

1 个答案:

答案 0 :(得分:1)

就像拼写错误一样简单。

client.Revert(targetPath);

应该是:

client.Revert(targetPath, revertArgs);