在Windows上通过Web表单进行SVN更新Linux机器

时间:2012-08-01 07:14:09

标签: php svn

我一直在这方面工作,我找不到解决方案(如果有的话)。

所以问题:有没有办法通过HTML网络表单发送svn update请求?

我测试了多个基于Web的SVN客户端(包括构建我自己的),但他们都无法进行更新。

我知道这是PHP使用的用户权限的问题,但即使我将系统上的所有文件都设置为777(在虚拟机上尝试过),我仍然无法做到存档它。

任何人都有这方面的经验吗?

谢谢你。

我还浏览了所有目录,并将所有者设置为Everyone并具有完全访问权限。现在不存在许可问题......我想。

上次修改: 如果脚本文件不在svn目录的根目录中,我似乎无法执行SVN。最终代码现在看起来像这样:http://codepad.org/Kb2K8e6m

3 个答案:

答案 0 :(得分:4)

以下功能应该或多或少地为您做。它还打印出来:

  1. 它在shell中执行的确切命令
  2. 命令的输出(包括错误),以便它也可以被调试。

  3. function updatesvn() {
    
        if ( isset($_POST) ) {
    
            //Get svn username and password from request parameters
    
            $username = <your_svn_username>;
            $password = <your_svn_password>;
    
            //Get version number to move to
            $values = $_POST;
            $version = $values['revision'];
    
            //validate version number
    
            //Path where you have checked out your project
            $rpath = '/var/www/myproj';
    
            //Command to svn update
            $cmd = "cd $rpath; svn cleanup; svn --non-interactive --username $username --password $password update -r $version 2>&1";
    
            echo $cmd;
            $out = shell_exec($cmd);
    
            echo $out;
        }
    }
    

    编辑:谨防此代码中的安全漏洞。我在这里简化了它。我们已在其中一个应用程序中使用它,其中达到此点的用户已预先通过身份验证,成为Web应用程序的Admin用户。此外,此代码在MVC框架中执行,其中输入的验证在中央位置完成,然后在控制器中执行操作。

答案 1 :(得分:1)

你可以使用PECL svn扩展中的svn_update()(或exec和命令行svn - 实际上差别不大。)

我更喜欢权限问题的解决方案是为所有将要更新的用户设置umask 002(包括www-data或您的网络服务器用户),将它们放入公共phpuser group,在之前为工作副本的根目录设置该组(chgrp phpuser <rootdir> - !),确保它是组可写的(chmod g+rwx <rootdir>)并将其设置为setgid(chmod g+s <rootdir>),但如果你不关心保留文件权限,那么肯定chmod -R 777 <rootdir>要简单得多。

答案 2 :(得分:0)

您是否正在构建持续集成服务器?你为什么要让任何Joe Bloggs更新你的本地存储库?

你必须在后端有一些代码才能在shell中执行“svn update”。

通常,基于Web的SVN客户端将直接提供给SVN存储库,默认情况下是最新的 - 它甚至可以让您查看以前的版本和差异。