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

标签 git shell hook trac git-post-receive

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

  1. 通过差异向开发团队发送电子邮件
  2. 如果提交消息中有一些特殊的短语(如“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/

相关文章:

git - 使用 SourceTree 将先前的 git 提交分解为更小的提交

git - 使用 Git 和 Nuget 管理内部共享库

swift - 如何使用进度条显示 cocoa 中 NSTask 的 `git clone` 进度

shell - 对数字范围使用 sed 命令

git - 如何防止删除纯 GIT 中的远程分支

c++ - 永远不会调用全局 CBT Hook

git, gitolite 错误推送

java - 我可以通过Java运行交互式脚本吗?

shell - 如何确保每个主机只执行一次 Ansible shell 命令?

python - 如何从 Mercurial Input 或 Changeset Hook 访问提交消息