如何使用SharpSVN在程序中“将文件夹添加到忽略列表”?

5
我该如何使用SharpSVN以编程方式将文件夹添加到忽略列表中? 编辑:
这是我尝试过的内容。
svnClient.GetProperty(new SvnUriTarget("svn://svn.foo.com/" + DatabaseName + "/"), SvnPropertyNames.SvnIgnore, out ignores);
ignores += " Artifacts";
var args = new SvnSetPropertyArgs() { BaseRevision = ???, LogMessage = "update ignore list" };
svnClient.SetProperty(new Uri("svn://svn.foo.com/" + DatabaseName + "/"), SvnPropertyNames.SvnIgnore, ignores, args);

但是我不知道如何获取BaseRevision(我可以手动获取,这样可以工作,但是我尝试的所有GetProperty组合似乎都没有给我它。)

解决方案:基于Bert的答案

SvnGetPropertyArgs getArgs = new SvnGetPropertyArgs(){};
string ignores = "Artifacts";
string result;
if(svnClient.GetProperty(new SvnUriTarget("svn://svn.foo.com/" + ProjectName + "/trunk/"), SvnPropertyNames.SvnIgnore,out result))
{
    ignores = result + " Artifacts"; //TODO: check for existing & tidy formatting.
}
svnClient.SetProperty(UncPath.TrimEnd('\\'), SvnPropertyNames.SvnIgnore, ignores);
SvnCommit(svnClient);

你应该只在本地工作副本上检索和设置属性,然后提交更改到仓库。要做到这一点,只需将 UriTarget 替换为本地路径即可。 - Bert Huijben
并不是很相关(因为本地路径更容易处理):但是你不必直接使用SvnUriTarget类,你可以只传递一个普通的System.Uri实例。有针对string-> SvnPathTarget和Uri->SvnUriTarget的自动转换定义。 - Bert Huijben
1个回答

4
忽略列表存储在包含要忽略的文件/目录的父目录上的“svn:ignores”属性中。(请参见Subversion booksvn help propset)因此,要添加一个项目,您必须获取原始属性值(如果存在),然后使用空格分隔符添加额外的项目。SvnClient上的函数是GetProperty和SetProperty()。

那很有帮助,但我仍然缺少一些细节来使其工作(请参见编辑后的问题)。 - Myster
我没有本地路径,我有一个UNC路径。如果我这样调用'SetProperty':svnClient.SetProperty("\\dev1\www\www.automan.foo.com\\", "svn:ignore", " Artifacts"); 我会得到异常:"'\dev1\www' 不是一个工作副本" - Myster
啊,我明白了,我已经去掉了末尾的斜杠,现在它可以正常工作了。 - Myster

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