您如何使用 SharpSVN 递归地还原工作副本中的更改?

How do you recursively revert changes in a working copy using SharpSVN?

我有一个项目会自动合并并提交用户select编辑的修订列表,从一个分支到另一个分支。如果发生合并冲突,则进程中止并还原工作副本。

然而,当我再次尝试 select 一个通常不会在原始工作副本上引起冲突的修订时,我收到以下错误:

Merge failed: SharpSvn.SvnWorkingCopyException: Can't merge into conflicted node '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

就像打错字一样简单。

client.Revert(targetPath);

应该是:

client.Revert(targetPath, revertArgs);