我在使用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;
}
}
}
答案 0 :(得分: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)
有关更多建议,另请参阅this other answer。