1

我的 SVN 提交后挂钩有问题。钩子本身工作正常。

我已经添加:

echo "REPOS: $REPOS Rev: $REV" >>/tmp/mylog.txt

..当我使用shell作为www-data运行它时,一切正常,输出为:

REPOS: /var/local/svn/svn_project Rev: 624

但是当 SVN 自动调用钩子时,钩子正在执行,输出为:

REPOS:  Rev: 

结果是,我的钩子文件中的更新命令也不起作用..:/

有人知道问题出在哪里吗?为什么没有设置 $REPOS 和 $REV?

4

1 回答 1

1

为什么$REPOS没有$REV设置?

因为您需要在脚本中设置它们。见这篇文章

使用有序参数调用钩子。
每种情况下的第一个是$REPOS(存储库的路径),然后第二个参数在每种情况下都不同:

  • start-commit: $USER(试图提交的用户)
  • pre-commit:($TXN-NAME即将提交的事务的名称。默认情况下,从当前修订号生成。)
  • post-commit:($REV刚刚提交的修订号)。

虽然这些是默认参数和它们的标准名称,但在您设置它们之前,脚本当然不会知道参数名称!它们作为有序参数传入(例如$1$2在 bash 中)。
最好在脚本开始时设置适当的命名变量,当然是在调用任何其他脚本之前,以避免不必要地混淆自己。例如,在 sh 中使用 post-commit 脚本:

#!/bin/sh

REPOS="$1"
REV="$2"

SCRIPT="/home/username/svn/repository/hooks/script.pl"

"$SCRIPT" "$REPOS" "$REV" thirdarg || exit 1
于 2013-11-30T12:00:21.623 回答