svn post-commit无法运行svn update

时间:2014-08-22 19:09:44

标签: svn

我有一个运行此命令的帖子提交脚本:

svn update '/path/to/working/dir'

当使用Tortoise从我的计算机提交到我的服务器上的repo时,我收到以下消息:

post-commit hook failed (exit code 1) with output:
svn: Can't open file '/path/to/working/dir/.svn/lock': Permission denied

所以这引出了用户运行svn的问题,以及我需要在服务器上的工作目录上设置哪种权限?它还值得注意的是,这个假想的锁定'文件甚至不存在。 SVN不应该简单地创建吗?

我甚至已经完成了所有文件和777所有目录,但仍然出现了错误,似乎我不应该为了实现这一目标而牺牲安全性。 / p>

谢谢!

2 个答案:

答案 0 :(得分:0)

最后,我得到了它的工作,感谢:http://cntrint.blogspot.ca/2009/08/subversion-autodeploy-post-commit-hook.html

我清空了工作目录并修改了我的提交后脚本以包含这一行:

svn checkout http://example.com/svn /home/cd8597/svnwc --non-interactive --username myusername --password **********

我对我的一个文件和更新的svn进行了一些微不足道的更改。运行得很好,然后我删除了上面的行并将其替换为:

svn update /home/cd8597/svnwc --non-interactive --username myusername --password **********

现在一切都在我的世界里。

答案 1 :(得分:0)

这是你不应该在post-commit钩子里做的事情。原因很多。首先,如果提交后失败,它会将用户的工作副本置于未知状态(通常执行svn update将修复它)。它也可能需要非常长的时间。这意味着用户必须坐在那里等待提交完成,直到您的提交后脚本运行。

这是否意味着您无法通过提交后挂钩实现此目的?不。但是,您也可以使用Bowie刀和一瓶威士忌进行阑尾切除术,但这也不是最好的方法。

如果您尝试在提交后更新服务器,然后将其复制到另一台服务器,我强烈建议您考虑使用Jenkins。 Jenkins可以在不占用提交过程的情况下处理这个问题。此外,Jenkins可以记录正在发生的事情,如果事情失败,可以通过电子邮件,即时消息,短信甚至Twitter通知某人。

通常,您认为Jenkins是编译过程的一部分,Jenkins在每次更改后编译代码,但Jenkins在编译代码的环境中工作得非常漂亮。我曾在JavaScript,Python,Perl,CGI甚至PHP环境中使用过。一旦你使用Jenkins完成这项任务,你可能会意识到你可以用Jenkins做的其他事情,你不敢在提交后的钩子里做。