0

我在使用 sharpsvn 提交时遇到问题。现在我正在添加我的工作副本的所有文件(如果添加文件会引发异常),然后我会提交。它有效,但会引发异常。有一些方法可以在 add() 之前获取存储库的状态,并且只添加新文件或更改的文件?如果我删除工作副本上的一个文件或文件夹,如何删除存储库中的这些文件或文件夹?代码:

 String[] folders;
 folders = Directory.GetDirectories(direccionLocal,"*.*", SearchOption.AllDirectories);
 foreach (String folder in folders)
            {
                String[] files;
                files = Directory.GetFiles(folder);
                foreach (String file in files)
                {
                    if (file.IndexOf("\\.svn") == -1)
                    {
                        Add(file, workingcopy);
                    }
                }

            }


            Commit(workingcopy, "change"); 

添加:

    public bool Add(string path, string direccionlocal)
    {
        using (SvnClient client = new SvnClient())
        {
            SvnAddArgs args = new SvnAddArgs();
            args.Depth = SvnDepth.Empty;
            Console.Out.WriteLine(path);
            args.AddParents = true;


            try
            {
                return client.Add(path, args);
            }
            catch (Exception ex)
            {
                return false;
            }

        }
    }

犯罪:

    public bool Commit(string path, string message)
    {
        using (SvnClient client = new SvnClient())
        {
            SvnCommitArgs args = new SvnCommitArgs();


            args.LogMessage = message;
            args.ThrowOnError = true;
            args.ThrowOnCancel = true;

            try
            {
                return client.Commit(path, args);
            }
            catch (Exception e)
            {
                if (e.InnerException != null)
                {
                    throw new Exception(e.InnerException.Message, e);
                }

                throw e;
            }
        }
    }
4

1 回答 1

3

你有没有尝试过类似的东西

using(SvnClient client = new SvnClient())
{
   SvnAddArgs aa = new SvnAddArgs();
   aa.Depth = SvnDepth.Infinity;
   aa.Force = true;

   client.Add(rootDir, aa);
}

添加文件?

这应该都没有将文件添加到您的工作副本中。(相当于svn add --force <dirname>

如果你告诉你得到什么样的异常,这会有所帮助。Subversion 库可以返回数千种不同的错误代码。其中大多数都有有趣的消息文本。

SharpSvn 将所有特定的 Subversion 错误嵌套为内部异常。最后的代码删除了外部异常并丢失了其余异常的堆栈跟踪。在外部异常上使用 .ToString() 应该会给你最好的错误文本。(对于与 svn.exe 类似的错误输出,您需要连接所有 .Messages)

另请参阅此其他答案以获取更多建议。

于 2010-03-05T20:09:50.880 回答