如何找到我的 Subversion 服务器版本号?

Posted

技术标签:

【中文标题】如何找到我的 Subversion 服务器版本号?【英文标题】:How to find my Subversion server version number? 【发布时间】:2010-09-13 13:24:12 【问题描述】:

我想知道我的服务器是否运行 Subversion 1.5。

我怎样才能找到它?

也很高兴知道我的 SVN 客户端版本号。 svn help 没有帮助。

注意:我不想要我的项目的修订号等。这个问题是关于Subversion 软件本身的。

【问题讨论】:

除非管理员运行“svnadmin upgrade”,否则不会自动更新存储库。要确定存储库的版本号,请检查“格式”文件。见@bdumitriu's answer on another question。 【参考方案1】:

要查找 subversion REPOSITORY 的版本,您可以:

    查看网络上的存储库,页面底部会显示如下内容: “由 Subversion 版本 1.5.2 (r32768) 提供支持。” 从命令行:

如果没有显示,查看页面源代码

<svn version="1.6.13 (r1002816)" href="http://subversion.tigris.org/"> 

现在是颠覆客户:

svn --version

足够了

【讨论】:

这仅在服务器显示此信息时才有效,某些服务器(如 google 代码托管)不会。 这是服务器版本,还是存储库版本? (他们可以是不同的 AFAIK) 您还可以查看响应标头(例如使用 firebug/net 视图)并在其中找到 SVN 版本 CollabNet 也不会显示版本号 - 无论是可见的还是在页面的源代码中。 -1:等待这个答案完成(“”占位符。)否则答案对我没有用,因为我使用的服务器是svn://-only.【参考方案2】:

让我们合并这些响应:

对于 REPOSITORY / SERVER(原始问题):

如果能够访问 Subversion 服务器:

从 Manuel 之前的 answer 开始,在 SVN 服务器上运行以下命令:

svnadmin --version

如果是 HTTP/HTTPS 访问:

通过浏览器访问服务器时,请参阅“由 Subversion 提供支持”行。

通过浏览器访问存储库,然后查找嵌入在 html 源代码中的版本字符串。来自earlier answers by elviejo 和jaredjacobs。同样,从 ?? 开始,使用浏览器的开发工具(通常是 Ctrl + Shift + I)来阅读完整的响应。这也是处理证书和授权的最简单(非自动化)方式 - 您的浏览器会为您完成。

检查来自an earlier answer 的Christopher 的响应标签(这些未显示在HTML 源代码中)

wget -S --spider 'http://svn.server.net/svn/repository' 2>&1 |
sed -n '/SVN/s/.*\(SVN[0-9\/\.]*\).*/\1/p'

如果svn://或者ssh+svn访问

来自an earlier answerMilen

svnserve --version   (run on svn server)

来自an earlier answerGlenn

ssh user@host svnserve --version

如果 GoogleCode SVN 服务器

    Check out the current version in a FAQ: 
    http://code.google.com/p/support/wiki/SubversionFAQ#What_version_of_Subversion_do_you_use?

如果另一个自定义 SVN 服务器

    TBD

请编辑以完成此答案

对于客户(不是原始问题):

svn --version

【讨论】:

这个答案不清楚,必须在服务器上使用svnserve --version。如果它在客户端上运行,它会给出客户端的版本号,而不是服务器。 这是一个很好的收藏。我是通过“从 http/https 访问中读取完整响应”的方式做到的。在我的情况下,我可以在响应标题中看到一行: 如果有人在使用 Visual SVN Server,HTML 源代码的前几行(右键单击,查看页面源代码)将指示 SVN 版本。 这个答案是being discussed on Meta。 SmartSVN 视图页面源不显示版本号,并且提及单击 power by 链接离开服务器,并将一个带到供应商站点而不是 visualsvn.com/server【参考方案3】:

在服务器上:svnserve --version

如果是基于 svnserve 的配置(svn:// 和 svn+xxx://)。

(为了完整性)。

【讨论】:

正如 Joe J 下面提到的,我相信这只会为您提供最有可能匹配 svn 客户端程序的 svnserve 客户端程序版本 svnserve 不是客户端程序,它是服务器。当你在服务器上时,你必须输入上面的命令。【参考方案4】:

这是获取 SVN 服务器版本的最简单方法。即使您的 SVN 存储库需要 HTTPS,HTTP 也可以工作。

$ curl -X OPTIONS http://my-svn-domain/ ... ... Apache/2.2.11 (Debian) DAV/2 SVN/1.5.6 php/5.2.9-4 ... 【参考方案5】:

对于基于 HTTP 的服务器,有一个 Python 脚本可以在以下位置找到服务器版本: http://svn.apache.org/repos/asf/subversion/trunk/tools/client-side/server-version.py

您可以通过

获取客户端版本
`svn --version`

【讨论】:

除非我弄错了,否则该脚本似乎只适用于基于 http 或 https 的服务器,而不适用于 svn 或 ssh+svn 服务器 如果它是基于 ssh 的,只需 ssh 进入框并运行“svn --version”。 'svn --version' on server 只给你服务端运行的客户端版本,不一定和服务端版本一样 该脚本还需要在 Apache 服务器上设置 ServerTokens Full。对于 curl 解决方案将失败的相同服务器,它将失败。【参考方案6】:

如果 HTML 列表中没有打印 Subversion 服务器版本,则它在服务器返回的 HTTP RESPONSE 标头中可用。你可以使用这个shell命令来获取它

wget -S --no-check-certificate \
  --spider 'http://svn.server.net/svn/repository' 2>&1 \
  | sed -n '/SVN/s/.*\(SVN[0-9\/\.]*\).*/\1/p';

如果 SVN 服务器要求您提供用户名和密码,则将 wget 参数 --user--password 添加到这样的命令中

wget -S --no-check-certificate \
  --user='username' --password='password' \
  --spider 'http://svn.server.net/svn/repository' 2>&1 \
  | sed -n '/SVN/s/.*\(SVN[0-9\/\.]*\).*/\1/p';

【讨论】:

我尝试了此页面上的所有其他选项,包括 curl 和来自 URL,这是迄今为止唯一对我有用的选项 - 服务器是 freebsd,服务器 1.6.16。 同样,这是这里所有答案中唯一对我有用的答案。我使用 Firefox Live HTTP Headers 并读取服务器的响应,因为我也遇到了 ssl 证书问题,我不想费心去解决。谢谢你,克里斯托弗 @Kirby 我添加了一个--no-check--certificate 参数、一个--user--password 来处理需要凭据但没有有效ssh 证书的服务器。正如您所指出的,这很常见。 @Christopher 它应该是 ''wget --password='password' .. | .. ;'以上。 @whaefelinger 感谢您的更正。我已经更新了答案。【参考方案7】:

另一种选择:如果您有 Firefox(我使用的是 14.0.1)和 SVN 网络界面:

在 repo 页面上打开 Tools->Web Developer->Web Console 刷新页面 点击GET行 查看 Server: 行中的 Response Headers 部分

那里应该有一个“SVN/1.7.4”字符串或类似的字符串。同样,这可能仅在您拥有如上所述的“ServerTokens Full”时才有效。

【讨论】:

谢谢。我刚刚在 Chrome 中为 VisualSVN 服务器做了类似的事情,方法是在开发者工具窗口中打开网络选项卡(按 F12 访问它),然后检查响应。 更新:在刷新页面前点击工具面板中的网络标签(目前是Firefox 30) 不适用于我(CollabNet 服务器):标题中没有报告版本。 SmartSVN 只返回 Server: Apache - 没有 SVN/x.y.z 版本信息【参考方案8】:

确实没有一种简单的方法可以找出您的服务器正在运行的 Subversion 版本 - 除非进入服务器并亲自查看。

但是,这可能没有您想象的那么大。 Subversion 客户端处理了大部分繁重的工作,并且大多数版本的 Subversion 客户端几乎可以与任何版本的服务器一起使用。

服务器版本真正对客户端产生影响的最后一个版本是在添加合并跟踪时从版本 1.4 更改为版本 1.5。合并跟踪在 1.6 版中得到了极大的改进,但这并没有真正影响客户端和服务器之间的交互。

让我们看看 Subversion 1.8 的最新变化:

svn move 现在是一级操作:Subversion 终于明白svn move 不是svn copysvn delete。但是,这是客户端处理的事情,不会真正影响服务器版本。 svn merge --reintegrate deprecated:同样,只要服务器是 1.5 或更高版本,这不是问题。 属性继承:这是另一个 1.8 版本更新,但它适用于任何 Subversion 服务器 - 尽管运行 1.8 的 Subversion 服务器将在可继承属性上提供更好的性能。 两个新的可继承属性 - svn:global-ignoressvn:auto-props:唉!我们真正想要的。一种设置这两个属性的方法,而不依赖于 Subversion 配置文件本身。但是,这是一个仅限客户端的问题,因此您使用的服务器版本无关紧要。 gnu-agent 内存缓存:另一个仅限客户端的功能。 fsfs 性能增强和 authz 存储库内身份验证。不错的功能,但无论您使用什么版本的客户端,这些功能都有效。

在所有功能中,只有一个取决于服务器的版本是 1.5 或更高版本(而 1.4 已经过时了一段时间。1.8 的新功能将提高工作副本的性能,但服务器在1.8 版不是必需的。与服务器版本相比,客户端版本对您的影响更大。

我知道这不是您想要的答案(没有官方查看服务器版本的方式),但幸运的是服务器版本对您的影响并不大。

【讨论】:

【参考方案9】:

试试这个:

ssh your_user@your_server svnserve --version

svnserve, version 1.3.1 (r19032)
   compiled May  8 2006, 07:38:44

希望对你有帮助。

【讨论】:

【参考方案10】:

对于 svn+ssh 配置,使用 ssh 在主机上运行 svnserve --version:

$ ssh user@host svnserve --version

需要在实际作为服务器的机器上运行 svnserve 命令。

【讨论】:

这假设您可以通过 ssh 连接到服务器。通常使用authorized_keys 文件中的公钥和command=svnserve 配置svn+ssh 服务器,它会在没有--version 选项的情况下自动启动svnserver。【参考方案11】:

只需使用网络浏览器访问 SVN 地址。检查源代码 (Ctrl + U)。然后你会在 HTML 代码中找到类似的内容:

<svn version="1.6. ..." ...

【讨论】:

不适用于 SmartSVN 服务器,它需要登录到服务器并查看 README 文件(参见上面@bahrep 的回复)【参考方案12】:

使用 Firefox 浏览存储库并使用 Firebug 检查元素。在 NET 选项卡下,您可以检查页面的 Header。它会有类似的东西:

Server: Apache/2.2.14 (Win32) DAV/2 SVN/1.X.X

【讨论】:

在我的 subversion 服务器上试过这个,但看不到版本。查看其他类似的帖子,听起来并非所有 subversion 服务器都支持这种确定服务器版本号的特定方式。【参考方案13】:

对于 Subversion 1.7 及更高版本,服务器不提供指示服务器版本的页脚。但是您可以运行以下命令从响应标头中获取版本

$ curl -s -D - http://svn.server.net/svn/repository
HTTP/1.1 401 Authorization Required
Date: Wed, 09 Jan 2013 03:01:43 GMT
Server: Apache/2.2.9 (Unix) DAV/2 SVN/1.7.4

请注意,这也适用于您无权访问的 Subversion 服务器。

【讨论】:

SmartSVN 只返回 Server: Apache - 没有 SVN/x.y.z 版本信息【参考方案14】:

您可以使用HTTP 连接到您的 Subversion 服务器并在 HTTP 标头中找到版本号。

【讨论】:

【参考方案15】:

如果您使用VisualSVN Server,您可以通过几种不同的方式找到版本号。

使用 VisualSVN 服务器管理器

按照以下步骤通过管理控制台查找版本:

    启动 VisualSVN 服务器管理器 控制台。 查看仪表板右下角的版本

如果您单击版本,您还将看到组件的版本。

检查 README.txt 文件

按照以下步骤从 readme.txt 文件中找出版本:

    启动 notepad.exe。 打开 %VISUALSVN_SERVER%README.txt 文件。第一行显示版本号。

【讨论】:

这是唯一对我有用的解决方案,因为 wget 响应没有返回版本号。我希望有一种方法可以让 svn 客户端(我使用的是 cygwin 的命令行)在我们无法登录服务器时报告 subversion 服务器的 Apache Subversion 编号。顺便说一句,这是我登录服务器时看到的内容:` VisualSVN Server 4.2.2 ---------------------- .. 此发行版包含以下内容组件: - Apache Subversion 1.10.6 - Apache HTTP Server 2.4.43 - OpenSSL 1.1.1g - Serf 1.3.9 - SQLite 3290000 - ZLib 1.2.8 `

以上是关于如何找到我的 Subversion 服务器版本号?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问当前的 Subversion 内部版本号?

Subversion:如何找到所有未合并到主干的修订?

如何从命令行签出特定的 Subversion 版本?

将 subversion 存储库编号获取到代码中

subversion - 从匹配模式中获取修订号

如何利用SVN合并代码