4

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

我创建了我的提交后 shell 脚本post-commit.sh,并将其放在 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 手册和 Internet 进行了修复,但没有取得多大成功。

一个建议是制作一个日志文件以查看调用脚本时引起的任何错误。所以现在我的 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*在它的末尾有一个,并且当我 ls 挂钩目录中的文件时被列为 post-commit.sh* 。

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

4

2 回答 2

6

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

于 2012-04-05T23:19:07.960 回答
0

可能是你在一开始就错过了 #!/bin/sh 吗?

于 2012-04-05T16:42:39.263 回答