多个命令不是工作在git后收到
-
27-09-2019 - |
题
我令与核心预算资源调拨目标(trac).后推我要两件事要做:
- 发送电子邮件向发展的团队差异
- 如果有一些特别的短语,在提交消息(如"看见#1"),然后我希望提交信息应放在核心预算资源调拨目标(trac)的票。
第一件事就是解决的混帐提交通知。它完美的作品之后我已经创建了后收到钩:
#!/bin/sh /var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml
我的第二个要求可以作为解决所描述的在 http://trac-hacks.org/wiki/GitPlugin#post-receivehookscripts.它还完美的作品这样的后收到钩:
#!/bin/sh /var/trac/testgit/commit-updater
2事工作时,他们是分开的。但是我需要把它们结合起来。所以我创造了后收到钩:
#!/bin/sh /var/trac/testgit/commit-updater /var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml
这是非常有趣,但是这不是工作。命令完美地运行,以及当的单独运行,但是只有第一个作品的时候,他们被放到后收到钩。
如果我有这样的钩:
#!/bin/sh /var/trac/testgit/commit-updater /var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml
我收到以下错误
/var/lib/gems/1.8/gems/git-commit-notifier-0.8.0/bin/git-commit-notifier:12: undefined method `strip' for nil:NilClass (NoMethodError) from /var/lib/gems/1.8/bin/git-commit-notifier:19:in `load' from /var/lib/gems/1.8/bin/git-commit-notifier:19
但是,如果我改变了这2命令我没有收到任何错误,但只是第一命令的工作。
我将感谢任何的帮助。我在试图解决这个问题很长一段时间我没有任何想法。
解决方案
假设我的评论是正确的, commit-updater
是吃的 stdin
, 这应该做的把戏:
#!/bin/sh
FILE=`mktemp`
cat - > $FILE
cat $FILE | /var/trac/testgit/commit-updater
cat $FILE | /var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml
rm $FILE
其他提示
我发现ngoozeff的解决方案是有用的,但我不得不做一些补充。首先,脚本应该失败,如果一个钩的失败。在第二,一些钩子可以期望的论点。在我的情况的gitzilla钩是这样。
对于我的以下工作结合gitzilla和gitolite钩:
#!/bin/sh
FILE=`mktemp`
cat - > $FILE
cat $FILE | $GIT_DIR/hooks/update.gitzilla $* || exit 1
cat $FILE | $GIT_DIR/hooks/update.gitolite $* || exit 1
rm $FILE
注意元*和出口发言。你也可以使用美元GIT_DIR变量。更新。gitzilla和更新。gitolite文件是象征性的联系。
一个替代使用一个文件将是:
#!/bin/sh
while read oldrev newrev refname
do
echo $oldrev $newrev $refname | /var/trac/testgit/commit-updater
echo $oldrev $newrev $refname | /var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml
done
资料来源: http://mmm.beachtemple.com/blog/2009/04/06/git-post-receive-hook/
因为输入的数据不是所有的巨大的,你可以去没有临时文件和保持数据,在壳体:
#!/bin/sh
refs=$(cat)
/var/trac/testgit/commit-updater <<END
$refs
END
/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml <<END
$refs
END
不隶属于 StackOverflow