2011-02-02 10 views
9

私はgitが新しく、origin/masterへのプッシュ後にコミットメッセージをキャプチャし、(サーバ上で)ベースのbashスクリプトを実行できるようにしたい文字列に含まれるものgitコミットメッセージをキャプチャしてアクションを実行する方法

例えば、私のGitはコミットメッセージ場合は言う:[email] my commit message

コミットメッセージが[email]はその後、指定されたアクションを実行する含まれている場合は、それ以外の場合は、それをしません。

ここで私はpost-receiveフックで使用するのではと思っていたサンプルbashスクリプトです:

基本的に
#!/bin/bash 

MESSAGE= #commit message variable? 

if [[ "$MESSAGE" == *[email]* ]]; then 
     echo "do action here" 
else 
     echo "do nothing" 
fi 

私が知る必要があるすべては、上記のbashで使用するために、コミットメッセージの変数名が何であるかでありますスクリプト?また、これが正しいかどうかは分かりません。

答えて

24

ためgit hookたい。変数がgit-logコマンドを使用して取得することができます。

ので
git log -1 HEAD --pretty=format:%s 

、私のスクリプトは次のようになります。

#!/bin/bash 

MESSAGE=$(git log -1 HEAD --pretty=format:%s) 

if [[ "$MESSAGE" == *\[email\]* ]]; then 
     echo "do action here" 
else 
     echo "do nothing" 
fi 

私はこれが答えを探している他の誰を助けるかもしれない願っています。

+0

この '[email]'マークアップはあなたのコミットメッセージに永久に含まれますか? – Cascabel

+0

他の可能な方法:環境変数を使用してフックに信号を送ります。そのため、コミットメッセージには何も決してありません。これを簡単にするためにエイリアスを使用します。または、メッセージに書きたい場合は、コミット前のフックでマークアップを検出して、コミットが記録される前にメッセージを修正することができます。 (コミットが成功し、すぐに電子メールが送信されると仮定するか、またはコミット後のフックのために何かを保存して...) – Cascabel

+0

または、あなたは本当にこのポスト受信をしていますか、ポストコミットですか?もちろん、コミットメッセージを変更することはできません。しかし、これはあなたのソリューションがうまくいかないことを意味します。プッシュはただ1つのコミットをプッシュするだけでなく、任意の数の新しいリファレンスを更新することができます。実際には、[example](http://git.kernel.org/?p=git​​/git.git;a=blob;f=contrib/hooks/post-receive-email;hb=HEAD)を参照してください。 gitの貢献です。それは非常に扱いやすく、 '[email]'と言うコミットにのみ注意を払うように修正することができます。 – Cascabel

1

あなたは、おそらく私は、私は自分の質問への答えを考え出したと思う

+0

私はすでにポスト受信フックを使用しています。どの変数を私のbashスクリプトで使用するのですか?それとも、もっと良いのですが、私はそれを解析できるように何を使うべきかを教えてくれるリファレンスや例を教えてくれますか? –

+2

あなたの便宜のために、Pabloがあなたに送ったリンクからのテキストを投稿します: "コミットプロセス全体が完了した後、コミット後のフックが実行されます。パラメータは必要ありませんが、 git log -1 HEADを実行することによってコミットします。一般に、このスクリプトは通知などに使用されます。 – Dustin

+0

答えが実際に有用であるためには、少なくともそれ自身で立つために、少なくとも上記のコメントが含まれている必要があります。 – tripleee

関連する問題