0

我想在不需要工作副本的情况下在 SVN 存储库(通过 HTTP,如果重要的话)上执行 SVN 操作。基本上,这是我想做的事情:

  1. 检查目录是否远程存在。

    • 如果目录不存在,则创建它
  2. 检查存储库中是否存在文件

    1. 如果该文件不存在,请在存储库中使用我的内容创建一个新文件
      • 这必须使用我提供的作者姓名,而不是经过身份验证的 WebDAV 作者(这就是为什么 WebDAV 方法对我不起作用的原因)
    2. 如果该文件确实存在,请将其内容替换为我指定的文件的内容。

我一直在尝试使用自动版本控制方法,但该方法需要我为 WebDAV 服务器设置身份验证,这在我的情况下不太理想。我可以使用 FS 操作(客户端是 SVN 1.6,所以浅工作副本 + 命令行可以工作),但这既慢又不优雅。

是否有一个库(必须可以从 PHP 4.4 开始使用!)可以做我描述的事情?

4

4 回答 4

2

从我在 PHP 中涉足 SVN 的一点经验来看:如果你有从 PHP 脚本到svn可执行文件的命令行访问权限,那就去吧。

它总是比协议的 PHP 实现更快,更可靠。

我尝试过的所有 PHP SVN 客户端都有缺陷、错误或完全不稳​​定。(不过,我不知道 PECL 那个。)

于 2010-01-08T17:06:28.607 回答
2

查找svn命令行或 svn 扩展等效项:

检查目录是否远程存在。

svn info <URL>

如果目录不存在,则创建它

svn mkdir <URL>

检查存储库中是否存在文件

svn info <URL>

如果该文件不存在,请在存储库中使用我的内容创建一个新文件

如果没有工作副本,这个会更难。您可以创建一个临时文件,然后:

svn import /tmp/mytempfile <URL>

如果该文件确实存在,请将其内容替换为我指定的文件的内容。

svn delete <URL>

紧随其后的是,您无法在没有工作副本的情况下修改文件。请注意,这会导致对 Subversion 的使用非常不理想。它旨在存储更改,而不是文件。我不建议删除/导入来更改几行文本。

这必须使用我提供的作者姓名,而不是经过身份验证的 WebDAV 作者(这就是为什么 WebDAV 方法对我不起作用的原因)

您不能使用 webdav 提供任意作者姓名,您通过 HTTP(S) 向远程服务器进行身份验证,并且该姓名用作作者。如果您需要其他名称,则需要在服务器上创建另一个用户,并授予该用户对存储库的访问权限。

于 2010-01-08T17:17:42.533 回答
1

你可以试试这个类:http ://www.phpclasses.org/browse/package/4270.html

它应该从 PHP 3 开始工作......

于 2010-01-08T16:46:35.150 回答
0

也许PECL::svn 扩展手册)可以吗?

对于最后一个版本,要求是:

PHP Version: PHP 4.0.0 or newer


似乎有些功能可以做你想做的事;例如 :

  • svn_mkdir:在工作副本或存储库中创建目录。

但不确定你想要的一切的功能,虽然......

于 2010-01-08T16:59:59.650 回答