2012-04-05 115 views
4

我有一个SVN repo在我的服务器上设置,并有后提交问题。我在我的iMac上使用SmartSVN作为我的客户端。我通过SmartSVN的ssh + svn进行连接。我能够成功连接到SVN并对其进行更改,但是在从我的SVN客户端提交后,我的提交后脚本不起作用。SVN提交后挂钩将不会运行后提交

我创建了我的post-commit 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手册并通过互联网找到了一个没有太多成功的解决方案。

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

请任何帮助,这将不胜感激。

+0

如果将'post-commit.sh'重命名为'post-commit',会发生什么? – Wrikken 2012-04-05 16:45:30

+0

您在目录列表中的'post-commit.sh'末尾看到一个'*',因为'ls'命令可能与'ls -CF'类似。 '-F'选项告诉'ls'用'*'标记可执行文件,用'/'标记目录等。 – 2012-04-06 00:49:28

回答

0

难道你错过了一个#!/ bin/sh的开头吗?

+0

没有,这根本不起作用。这是不是一个评论 – Dom 2012-04-05 23:04:46

+0

它表明执行脚本到linux时使用的解释器,请参阅[Shebang](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) – mensi 2012-04-06 22:40:36