多个命令在git post-receive中不起作用

bes*_*bov 6 git shell hook trac git-post-receive

我正在使用带有trac的git.推后我想做两件事:

  1. 使用diff向开发团队发送电子邮件
  2. 如果提交消息中有一些特殊短语(如"参见#1"),那么我希望将提交消息放在trac票证中.

第一件事是通过git-commit-notifier解决的.在我创建post-receive 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中解释.它也适用于这种后接收挂钩:

#!/bin/sh

/var/trac/testgit/commit-updater

当它们分开时,这两件事都有效.但我需要将它们结合起来.所以我创建了post-receive钩子:

#!/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

但是,如果我改变这两个命令的顺序,我没有收到任何错误,但只有第一个命令工作.

我将不胜感激任何帮助.我试图解决这个问题很长一段时间,我没有想法.

ngo*_*eff 5

假设我的评论是正确的,并且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
Run Code Online (Sandbox Code Playgroud)

  • 需要反引号,否则你会得到"mktemp"作为文件名. (3认同)