如何显示来自颠覆服务器的存储库列表
Posted
技术标签:
【中文标题】如何显示来自颠覆服务器的存储库列表【英文标题】:How to display list of repositories from subversion server 【发布时间】:2010-12-14 04:46:02 【问题描述】:我正在寻找一种方法来搜索整个颠覆服务器。
我已经找到了search within a repository 的一部分。现在我需要为每个存储库执行此操作。
更新:
我必须从一些 unix shell 脚本(perl、bash 等)访问这个列表
【问题讨论】:
顺便问一下,您是否必须经常进行这些搜索,还是偶尔进行?我在考虑网络和服务器负载,如果您必须进行常规查询,也许有更优化的方法。 只是偶尔,但欢迎任何其他选择。 那么不值得寻找其他东西 ;-) 但我认为您不会逃脱网络内容提取 - 请参阅下面的链接以帮助在脚本环境中执行此操作。跨度> 【参考方案1】:您对 SVN 的访问不就像 Web 服务一样工作吗?当我访问我的 SVN 服务器的***目录时,我得到一个页面,该页面本质上是整个作品的目录。这是一个我可以简单浏览的无序列表。
编辑:这是我从命令行执行的方法:
wget http://user:password@svn-url/ -O - | grep \<li\>
【讨论】:
我必须从 unix 中的脚本语言访问它,而不是从网页。 如果您通过与 http(s) 不同的协议访问 svn 存储库,它就不会像 Web 服务那样工作。 svn 支持各种其他协议,包括它自己的一种,file 和 svn+ssh。如果您使用 http,这是一个配置选项(不)显示该服务器上的存储库列表。【参考方案2】:如果你的服务器是 Apache,你应该 能够对其进行配置以查看 带有viewvc 的存储库列表 - 这是最基本的,其他的更多 存在复杂的接口,但这是 不是你的目的。
在某些版本中,ViewVC 是标准安装的一个选项 现在,例如来自 Collabnet。
编辑:不要介意我之前的想法,Peter 有一个更简单的方法来发送存储库列表。
从那里,您必须:
获取 html 页面, 提取列表,然后 为单个存储库搜索处理它。不幸的是,在这种情况下,我想不出更直接的方法。
有关于如何从HTML pages in Python 提取文本的 SO 示例,这将是一个不错的选择,因为 Python 还具有 SVN 绑定,以执行存储库搜索 - 如果您仍然可以直接从 Python 调用 svn
喜欢。
如果 Python 不是您的最爱,您将不得不使用 GNU 工具(wget,然后是解析工具或现有软件包)以不同的方式处理它 - 我帮不上什么忙,Carl 为您提供了更多详细信息在这篇文章中)。
【讨论】:
【参考方案3】:如果您通过 apache 和 SVNParentPath 指令启用 svn,则可以将 SVNListParentPath On 指令添加到您的 svn 位置以获取所有存储库的列表。
你的 apache conf 应该看起来像这样:
<Location /svn>
DAV svn
SVNParentPath "/net/svn/repositories"
# optional auth stuff
SVNListParentPath On # <--- Add this line to enable listing of all repos
</Location>
【讨论】:
+1... 啊,这比使用 viewvc 更容易,我以为我以前见过,但在我的帖子中找不到它! :-) 正是我想要的。只需将浏览器指向存储库 DAV 的根目录,即可获得列表。我迟来的 +1 :) 那么,为了查看列表,我们必须使用浏览器吗?任何替代命令行? +1顺便说一句,因为我可以通过浏览器看到..但我仍然想知道是否存在任何命令行:) 我认为值得澄清的是,此设置启用了基于浏览器的 repo 列表。 the SVN book也证实了这一点。【参考方案4】:如果您熟悉 Java,您可以使用 SvnKit 进行浏览、搜索,天知道您的 Subversion 服务器会发生什么。
之后,您可以打包您的程序并通过 Ant 任务或 shell 脚本调用它。
这是一个相当“蛮力”的解决方案,但是一旦你掌握了 SvnKit,你真的可以做很多很酷的事情。
【讨论】:
【参考方案5】:我还希望在 SVN 中列出存储库。我在 shell 提示符下做了这样的事情:
~$ svn list https://www.repo.rr.com/svn/main/team/gaurav
Test/
Test2/
Test3/
Test4/
Test5/
Test6/
【讨论】:
这确实看起来正是 OP 所要求的 - 一种获取***存储库列表的 unix 脚本方式。很高兴看到它被接受。svn help list
输出显示list (ls): List directory entries in the repository.
。对我来说,这表明 list
命令仅列出当前存储库中的目录。当我尝试svn list https://your-svn-server/svn
时,我得到svn: E170013: Unable to connect to a repository at URL 'https://your-svn-server/svn'
。我在 Windows 上使用 Visual SVN Server 1.9.4 和 SVN 1.9.4 客户端。最后,您的示例看起来像是在 main
存储库内的 gaurav
子目录中列出文件。所以这个答案似乎没有提供列出所有回购的方法。如果我错了,请告诉我。【参考方案6】:
有时您可能希望检查存储库更新时间的时间戳,为了获得这些方便的信息,您可以使用 svn -v(详细)选项,如
svn list -v svn://123.123.123.123/svn/repo/path
【讨论】:
这如何回答这个问题?【参考方案7】:在我的公司,他们没有将服务器配置为提供存储库列表,因此svn list
为特定存储库工作,但没有在更高级别列出所有存储库。
但是他们安装了 FishEye,它为您提供了一个列出存储库的 GUI https://www.atlassian.com/software/fisheye
这是一个付费选项,因此并不适合所有人,但功能很好。
【讨论】:
以上是关于如何显示来自颠覆服务器的存储库列表的主要内容,如果未能解决你的问题,请参考以下文章
可以与 Eclipse 颠覆插件一起使用的最好的、免费的颠覆控制存储库是啥? [关闭]
在 Spring WebFlux 中,如何链接来自多个服务/存储库的方法,以便“删除”多个 DB-Collections 中的元素?