我正在使用带有 trac 的 git。推送后我想做两件事:
- 通过差异向开发团队发送电子邮件
- 如果提交消息中有一些特殊的短语(如“see #1”),那么我希望将提交消息放在 trac ticket 中。
首先通过git-commit-notifier解决。在我创建接收后 Hook 后它完美地工作:
#!/bin/sh /var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml
我的第二个要求可以按照 http://trac-hacks.org/wiki/GitPlugin#post-receivehookscripts 中的说明解决.它也可以与这样的接收后 Hook 完美配合:
#!/bin/sh /var/trac/testgit/commit-updater
当它们分开时,两者都有效。但我需要将它们结合起来。所以我创建了接收后 Hook :
#!/bin/sh /var/trac/testgit/commit-updater /var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml
这很有趣,但这行不通。这些命令在单独运行时运行得非常好,但是当它们被放入 post-receive Hook 时只有第一个命令有效。
如果我有这样的钩子(Hook):
#!/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
关于git - 多个命令在 git post-receive 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3448333/