SVN post-commit 钩子(Hook)在提交后不会运行

标签 svn shell post-commit

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

我创建了名为 post-commit.sh 的提交后 shell 脚本并将其放在 hooks 目录中,认为这是您必须做的所有事情才能使其正常工作。基本上,该脚本所做的是将 SVN checkout 到临时工作区,然后将必要的文件上传到我服务器上的开发子域。我这样做是为了为用户对我的 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 手册和 Internet 进行了修复,但没有取得多大成功。

一个建议是制作一个日志文件以查看调用脚本时引起的任何错误。所以现在我的提交后脚本调用了另一个文件,该文件具有上述命令并将命令行返回到一个名为 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 有一个 *在它的末尾,当我 ls Hook 目录中的文件时,它被列为 post-commit.sh*。

请,对此的任何帮助将不胜感激。

最佳答案

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

关于SVN post-commit 钩子(Hook)在提交后不会运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032531/

相关文章:

Git 与 SVN 主干和分支

svn - 如何通过 Web View 浏览 Subversion 存储库的旧版本?

shell - 使用 Set -e ,如何为一个命令设置异常

shell - 在 awk 中修剪字符串的前导和尾随空格

linux - Sed 一个空字符串并替换它

database - Subversion 服务器通过 SMB 访问存储库时出现错误消息 'database is locked'

svn - Jenkins 中的提交后 Hook 尝试使用相同的修订号更新所有 SVN checkout

linux - 用于验证 SVN 项目有效性的 Bash 脚本

Git post-commit hook 作为后台任务

svn - "Error Validating server certificate"VisualSVN 服务器上的提交后 Hook 错误