我有一个debian网络服务器,上面运行了subversion。
我正在尝试使用post-commit脚本来更新我的网站的暂存版本。
#!/bin/sh
/usr/bin/svn update /home/sites/example.com/www >> /var/log/svn/example.log 2>&1
如果我从用户'derek'登录的命令行运行该命令,那么一切正常
但是当它作为post-commit运行时,我的日志文件中出现以下错误:
svn: Can't open file '/home/sites/example.com/www/.svn/lock': Permission denied
好的,所以我意识到这里发生的事情是调用post-commit脚本的用户不是'derek'所以它没有权限。
所以我的问题是用户调用后提交脚本。
svnserve守护程序以derek的形式运行...我认为这意味着post-commit命令也会被称为derek,但似乎没有。
我可以找出用户如何调用它的任何想法
其次,允许该用户访问的最佳实践方法是什么?我不认为将它添加到组中会有所帮助,因为该组默认情况下没有.svn目录的写访问权。
更新
我发现调用post-commit脚本的用户实际上是www-data。所以现在我该如何解决这个问题。
答案 0 :(得分:0)
更新Oct8:对不起,我第一次没有得到正确的问题。这是正确的答案。
据我所知,你试图通过http(s)访问svn,这不需要svnserve。 Svnserve用于svn的专有协议(即svn或svn + ssh)。因此,当您通过http(s)访问svn时,它将作为webuser运行该进程。您可以通过执行'echo $ USER>来验证这一点post提交脚本中的/ tmp / svn_post_ci_user'。要解决此问题,只需将/home/sites/example.com/www中的工作副本签出为webuser。
旧更新:我认为不是试图找到用户,而是可以在svn update命令中包含--username derek,它可以解决您的问题。
答案 1 :(得分:0)
因此,这是用户之间共享写入的权限问题
chgrp
该工作副本umask
和www-data为002,以便每个创建的文件都可以分组写入答案 2 :(得分:0)
我得到了它的工作。我必须编写自己的c程序,但它有效!
感谢我在此处找到的信息:http://forum.webfaction.com/viewtopic.php?pid=216#p216