我的SVN post-commit钩子出了问题。 钩本身工作正常。
我添加了:
echo "REPOS: $REPOS Rev: $REV" >>/tmp/mylog.txt
..当我使用shell作为www-data运行它时,一切正常,输出为:
REPOS: /var/local/svn/svn_project Rev: 624
但是当SVN自动调用钩子时,挂钩正在执行,输出为:
REPOS: Rev:
结果是,我的钩子文件中的update-command也不起作用..:/
有人知道问题出在哪里吗? 为什么没有设置$ REPOS和$ REV?
答案 0 :(得分:1)
为什么
$REPOS
和$REV
未设置?
因为您需要在脚本中设置它们。见this article:
使用有序参数调用钩子 每种情况下的第一个是
$REPOS
(存储库的路径),然后第二个参数在每种情况下都不同:
start-commit
:$USER
(尝试提交的用户)pre-commit
:$TXN-NAME
(即将提交的事务的名称。默认情况下,这是从当前版本的编号生成的。)post-commit
:$REV
(刚刚提交的修订号)。虽然这些是默认参数和它们的标准名称,但是在设置它们之前,脚本当然不会知道参数名称!它们只是作为有序参数传递(例如,在bash中
中使用post-commit脚本$1
和$2
)。
最好在脚本开头设置适当的命名变量,当然在调用任何其他脚本之前,以避免不必要地混淆自己。例如,在sh:
#!/bin/sh
REPOS="$1"
REV="$2"
SCRIPT="/home/username/svn/repository/hooks/script.pl"
"$SCRIPT" "$REPOS" "$REV" thirdarg || exit 1