【问题标题】:How do I use SharpSVN to programatically "add to ignore list" for a folder如何使用 SharpSVN 以编程方式为文件夹“添加到忽略列表”
【发布时间】:2011-01-19 21:49:09
【问题描述】:

如何使用 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 替换为本地路径)。
  • 不相关(因为本地路径更容易):但您可以传递一个普通的 System.Uri 实例,而不是直接使用 SvnUriTarget 类。定义了 string->SvnPathTarget 和 Uri->SvnUriTarget 的自动转换。

标签: svn sharpsvn


【解决方案1】:

忽略列表存储在包含要忽略的文件/目录的父目录的“svn:ignores”属性中。 (见Subversion booksvn help propset

因此,要添加一个项目,您必须获取原始属性值(如果存在),然后添加用空格分隔的额外项目。 SvnClient 上的函数是 GetProperty 和 SetProperty()。

【讨论】:

  • 这很有帮助,但我仍然缺少一些细节以使其正常工作(请参阅编辑后的问题)
  • 我没有本地路径,我有 UNC 路径。如果我这样称呼'SetProperty': svnClient.SetProperty("\\\\dev1\\www\\www.automan.foo.com\\", "svn:ignore", "Artifacts");我得到了例外:“'\\dev1\\www' 不是工作副本”
  • 不是 100% 确定,但我认为这表明 www.automan.foo.com 文件也不是工作副本(甚至可能不是目录),您只能设置 svn:ignore 属性工作副本目录。
  • 啊,明白了,我已经删除了斜杠,它工作正常。
猜你喜欢
  • 2021-11-19
  • 2014-06-11
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
相关资源
最近更新 更多