我有一个运行此命令的帖子提交脚本:
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>
谢谢!
答案 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做的其他事情,你不敢在提交后的钩子里做。