我在.NET 4.0控制台项目中使用SharpSvn.1.7-x64.1.7010.2403(由NuGet提供)。经常使用svn list命令:
Collection<SvnListEventArgs> list;
client.GetList(new SvnUriTarget("https://dev:8443/svn/test/"), out list);
Console.WriteLine("Name |Path |Uri |RepositoryRoot");
Console.WriteLine("-------------------------------------------------------------------------------------------------------");
foreach (var item in list)
Console.WriteLine("{0,-16}|{1,-16}|{2,-42}|{3,-20}", item.Name, item.Path, item.Uri, item.RepositoryRoot);
输出以下内容:
Name |Path |Uri |RepositoryRoot
-------------------------------------------------------------------------------------------------------
| |https://dev:8443/svn/test/ |https://dev:8443/svn/test/
IAmImportant.txt|IAmImportant.txt|https://dev:8443/svn/test/IAmImportant.txt|https://dev:8443/svn/test/
Properties.txt |Properties.txt |https://dev:8443/svn/test/Properties.txt |https://dev:8443/svn/test/
sub |sub |https://dev:8443/svn/test/sub/ |https://dev:8443/svn/test/
最近我发现了以下神秘行为:使用修订版过滤器我不再使用Uri: - (
client.GetList(new SvnUriTarget("https://DEV:8443/svn/test/"), new SvnListArgs { Revision = SvnRevision.Head }, out list);
输出:
Name |Path |Uri |RepositoryRoot
-------------------------------------------------------------------------------------------------------
| | |
IAmImportant.txt|IAmImportant.txt| |
Properties.txt |Properties.txt | |
sub |sub | |
这是一个错误吗?如果它不是一个bug,任何人都可以解释原因吗?如何解决(希望不在每个项目上调用svn信息)?
答案 0 :(得分:1)
Subversion api并不真正提供.RepositoryRoot值。 SharpSvn知道在大多数情况下,它可以从list参数的第一个输出值计算,除非你通过了一个有效修订的特定情况。
请注意svn list URL -r 123和svn list URL @ 123之间的区别。第一个查看URL,因为它在头版本中已知,并将其原点追溯到版本123,其中它可能以不同的名称存在。第二个检查修订版123中URL的内容。 (如果有疑问,你很可能想要第二种形式......有关详细信息,请参阅颠覆书)
第二种形式作为SvnClient.List(新的SvnUriTarget(uri,pegrev),......)处理,并且计算有效。
然后通过组合RepositoryRoot和Path的知识形成Uri。 (如果你在某个地方有RepositoryRoot,你可以自己完成所有这些。但是在没有外部知识的情况下检索这个值是一个很大的性能损失。这就是SharpSvn提供它的原因,只有在它已经知道的情况下)