提交后SVN后提交挂钩不会运行

时间:2012-04-05 16:39:18

标签: svn shell post-commit

我在我的服务器上设置了SVN repo并且有提交后问题。我在我的iMac上使用SmartSVN作为我的客户端。我通过SmartSVN的ssh + svn连接。我能够成功连接到SVN并对其进行更改,但是在我从SVN客户端提交后,我的提交后脚本无法正常工作。

我创建了一个名为post-commit.sh的post-commit shell脚本,并将其放在hooks目录中,认为这是你为了让它工作所必须做的一切。基本上,脚本执行的操作是将SVN签出到临时工作空间,然后将必要的文件上载到我的服务器上的开发子域。我这样做是为了让我可以为用户为我的Web应用程序进行的所有更改提供测试环境。该文件原本看起来很喜欢这个。

rm -rf /home/modionzc/tempworkspace/artistcondevspace/*
cd /home/modionzc/tempworkspace/artistcondevspace
svn checkout file:///home/modionzc/svnrepos/artistcondevrep
rm -rf /home/modionzc/public_html/devsuper/application/*
rm -rf /home/modionzc/public_html/devsuper/css/*
rm -rf /home/modionzc/public_html/devsuper/js/*
rm -rf /home/modionzc/public_html/devsuper/images/*
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/application/* /home/modionzc/public_html/devsuper/application/
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/css/* /home/modionzc/public_html/devsuper/css/
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/js/* /home/modionzc/public_html/devsuper/js/
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/images/* /home/modionzc/public_html/devsuper/images/
cp /home/modionzc/artistconconfig/appconfigfiles/config.php /home/modionzc/public_html/devsuper/application/config/config.php
cp /home/modionzc/artistconconfig/appconfigfiles/database.php /home/modionzc/public_html/devsuper/application/config/database.php
cd /home/modionzc/public_html/devsuper
chmod -R 755 *
chmod 644 $(find *.* ! -type d)

当我从命令行手动运行它并更新必要的文件时,它运行正常。现在由于某种原因,每当我从SmartSVN提交时都不会被调用。更改是通过存储库进行的,如果我手动运行脚本,我可以看到实际进行了更新。我做了一些研究,发现它可能是许可问题,或者我没有使用绝对路径。我在整个脚本中使用绝对路径。该文件的权限设置为755.我唯一能想到的是实际的SVN用户没有权限,这是在conf文件中创建的用户。我已经查看了SVN手册并通过互联网进行了修复,但没有取得多大成功。

一个建议是创建一个日志文件,以查看调用脚本时导致的任何错误。所以现在我的post-commit脚本调用另一个具有上述命令的文件,并输出命令行返回到一个名为svna.log的文件。 post-commit.sh文件现在看起来像这样。

cd /home/modionzc/hooktest/
/home/modionzc/hooktest/ac_post_commit.sh &> svna.log

其中ac_post_commit.sh包含上面的原始代码。 再次,如果我手动调用它,所有响应都会根据需要转到文件,但如果我从SmartSVN提交我的工作,则日志文件实际上是空的。

仅供参考 - 出于某种原因,我的post-commit.sh在其末尾有一个*,当我在hooks目录中找到文件时,它被列为post-commit.sh *。

请不要对此提出任何帮助。

2 个答案:

答案 0 :(得分:6)

我在svn论坛上发现了这个问题,同时看着另一个人发帖http://www.svnforum.org/threads/40951-How-repository-hooks-works?highlight=post-commit。问题在于提交后文件不能在其末尾附加.sh。它需要被命名为" post-commit"。这确实需要具有您在第一行中编写的脚本类型的路径,这是Mensi上面提到的,但不是脚本的问题。无论如何,谢谢你的帮助。

答案 1 :(得分:0)

你可能在开头缺少#!/ bin / sh吗?