6

私はtracでgitを使用しています。プッシュした後、2つのことを実行したいと思います。

  1. diffを使用して開発チームにメールを送信する
  2. コミットメッセージに特別なフレーズがある場合(「#1を参照」など)、コミットメッセージをtracチケットに配置する必要があります。

最初のことはgit-commit-notifierによって解決されます。受信後のフックを作成した後は、完全に機能します。

#!/ bin / sh

/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

私の2番目の要件は、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:nil:NilClassの未定義のメソッド `strip'(NoMethodError)
        /var/lib/gems/1.8/bin/git-commit-notifier:19:in`load'から
        /var/lib/gems/1.8/bin/git-commit-notifier:19から

しかし、この2つのコマンドの順序に変更してもエラーは発生しませんが、最初のコマンドのみが機能します。

助けていただければ幸いです。私は長い間この問題を解決しようとしていますが、私には考えがありません。

4

4 に答える 4

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
于 2010-08-10T12:28:23.860 に答える
1

ngoozeffのソリューションは便利だと思いましたが、いくつか追加する必要がありました。最初は、フックの1つが失敗すると、スクリプトは失敗するはずです。次に、一部のフックは引数を期待する場合があります。私の場合、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

$*とexitステートメントに注意してください。$GIT_DIR変数を使用することもできます。update.gitzillaファイルとupdate.gitoliteファイルはシンボリックリンクです。

于 2011-09-11T11:11:26.637 に答える
1

ファイルを使用する代わりに、次のようになります。

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

于 2014-01-16T10:10:37.140 に答える
0

入力データはそれほど大きくないので、一時ファイルなしでデータをシェルに保持できます。

#!/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
于 2014-03-19T20:03:51.930 に答える