我一直在这方面工作,我找不到解决方案(如果有的话)。
所以问题:有没有办法通过HTML网络表单发送svn update
请求?
我测试了多个基于Web的SVN客户端(包括构建我自己的),但他们都无法进行更新。
我知道这是PHP使用的用户权限的问题,但即使我将系统上的所有文件都设置为777
(在虚拟机上尝试过),我仍然无法做到存档它。
任何人都有这方面的经验吗?
谢谢你。
我还浏览了所有目录,并将所有者设置为Everyone
并具有完全访问权限。现在不存在许可问题......我想。
上次修改: 如果脚本文件不在svn目录的根目录中,我似乎无法执行SVN。最终代码现在看起来像这样:http://codepad.org/Kb2K8e6m
答案 0 :(得分:4)
以下功能应该或多或少地为您做。它还打印出来:
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存储库,默认情况下是最新的 - 它甚至可以让您查看以前的版本和差异。