Php 如何连接到远程svn服务器并检索最新版本号

Php 如何连接到远程svn服务器并检索最新版本号,php,svn,Php,Svn,我有一个在本地主机上运行的PHP应用程序,还有一个远程SVN存储库。我使用SVNTortoise客户端,它工作得非常好,但我想通过PHP连接到svn存储库,获取最新的修订号,仅此而已。我看到了其他类似的问题,但在我的例子中,重点是我想连接到远程存储库。如何在远程服务器上运行svn--version命令并用PHP处理响应?有几种方法可以实现这一点,我并不真正使用PHP,因此我不会给您提供PHP代码,但我将告诉您如何将其转换为PHP代码 命令行客户端 请意识到svn--version并没有回答您想要

我有一个在本地主机上运行的PHP应用程序,还有一个远程SVN存储库。我使用SVNTortoise客户端,它工作得非常好,但我想通过PHP连接到svn存储库,获取最新的修订号,仅此而已。我看到了其他类似的问题,但在我的例子中,重点是我想连接到远程存储库。如何在远程服务器上运行svn--version命令并用PHP处理响应?

有几种方法可以实现这一点,我并不真正使用PHP,因此我不会给您提供PHP代码,但我将告诉您如何将其转换为PHP代码

命令行客户端

请意识到
svn--version
并没有回答您想要的问题(它说明Subversion客户端是什么版本)。当前发布的Subversion版本不包含直接请求所需信息的命令(1.9将包含
svn
,后者会)。因此,从客户机获取此信息通常需要执行
svnlog-r HEAD$URL
,然后从中解析修订号。如果希望解析xml,可以使用
--xml

Subversion API

您可以使用我们的C API或语言绑定来使用该函数。您需要打开一个存储库访问(RA)会话,然后在该会话上调用该函数。但是,Subversion没有为PHP提供API绑定。所以这可能对你没什么用处

针对1.7和更新的HTTP SVN服务器的选项请求

1.7和更新版本的服务器在
SVN-Rev
标题中提供此信息,以响应选项请求(客户端通过哪些操作来确定服务器支持哪些功能)。您只需要使用XML在请求正文中请求
活动集合集
。例如,此curl命令从ASF存储库检索头部修订:

curl -si -X OPTIONS --data-binary '<?xml version="1.0" encoding="utf-8"?><D:options xmlns:D="DAV:"><D:activity-collection-set></D:activity-collection-set></D:options>' http://svn.apache.org/repos/asf | grep SVN-Youngest-Rev
这会给你一个这样的回复:

<?xml version="1.0" encoding="utf-8"?>
<propfind xmlns="DAV:">
<prop>
<version-controlled-configuration xmlns="DAV:"/>
</prop>
</propfind>
<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:" xmlns:ns0="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp3="http://subversion.tigris.org/xmlns/dav/">
<D:href>/repos/asf/</D:href>
<D:propstat>
<D:prop>
<lp1:version-controlled-configuration><D:href>/repos/asf/!svn/vcc/default</D:href></lp1:version-controlled-configuration>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:" xmlns:ns0="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp3="http://subversion.tigris.org/xmlns/dav/">
<D:href>/repos/asf/!svn/vcc/default</D:href>
<D:propstat>
<D:prop>
<lp1:checked-in><D:href>/repos/asf/!svn/bln/1573025</D:href></lp1:checked-in>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
这给了你这样的回答:

<?xml version="1.0" encoding="utf-8"?>
<propfind xmlns="DAV:">
<prop>
<version-controlled-configuration xmlns="DAV:"/>
</prop>
</propfind>
<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:" xmlns:ns0="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp3="http://subversion.tigris.org/xmlns/dav/">
<D:href>/repos/asf/</D:href>
<D:propstat>
<D:prop>
<lp1:version-controlled-configuration><D:href>/repos/asf/!svn/vcc/default</D:href></lp1:version-controlled-configuration>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:" xmlns:ns0="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp3="http://subversion.tigris.org/xmlns/dav/">
<D:href>/repos/asf/!svn/vcc/default</D:href>
<D:propstat>
<D:prop>
<lp1:checked-in><D:href>/repos/asf/!svn/bln/1573025</D:href></lp1:checked-in>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>

/回购/asf/!svn/vcc/default
/回购/asf/!svn/bln/1573025
HTTP/1.1200ok
签入标记的href的最后一段是HEAD的修订号

获取针对svn服务服务器的最新版本命令(svn://协议)


我不打算详细介绍如何直接使用svn://协议来实现这一点,但您希望使用最新的rev命令。

Ben answer的简易版本

为了获得存储库的最新版本(或repo内的路径),您可以

  • 在PHP内部调用OS commmand
    svn info URL/TO/REPO
    ,解析答案并提取相关字符串(如果您有TortoieSVN,您有或可以有svn客户端的CLI版本)
来自Assembla回购协议的样本

>svn info https://subversion.assembla.com/svn/subversion-troubleshoot-b/
Path: subversion-troubleshoot-b
URL: https://subversion.assembla.com/svn/subversion-troubleshoot-b
Relative URL: ^/
Repository Root: https://subversion.assembla.com/svn/subversion-troubleshoot-b
Repository UUID: faaf0d5a-5d64-45f4-9e2a-979cddfce0d6
Revision: 7
Node Kind: directory
Last Changed Author: abream
Last Changed Rev: 7
Last Changed Date: 2012-10-17 22:14:36 +0600 (Ср, 17 окт 2012)
您将使用字符串
Revision
作为全局存储库(或某些子树)的修订ID

  • 获取并使用它的