2017-02-19 9 views
0

git commitにJIRAチケットを追加するようユーザーに強制しようとしています。コミットメッセージにJIRAチケット番号を強制するためのgitフック

私はプリレシーブフックを使用しましたが、プッシュ後にのみ動作しています。コミット後に動作させたいので、メッセージの形式が間違っていると、コミットは失敗し、ユーザーはコミットを編集するオプションを持ちます。

これは私のコードの例です:

#!/usr/bin/env bash 

# set this to your active development branch 
#develop_branch="master" 
#current_branch="$(git rev-parse --abbrev-ref HEAD)" 

# only check commit messages on main development branch 
#[ "$current_branch" != "$develop_branch" ] && exit 0 

# regex to validate in commit msg 
commit_regex='(#-[0-9]+|merge)' 
error_msg="Aborting commit. Your commit message is missing either a JIRA Issue ('#-1111') '" 
rm -rf fl.txt 
echo $1 >> fl.txt 
fil="fl.txt" 

if ! grep -iE $commit_regex $fil; then 
    echo "$error_msg" >&2 
    exit 1 
fi 
rm -rf fl.txt 
+0

コミットが失敗するようにするには、プリコミットフックが必要です。コミット後に*動作してはいけません。 – jonrsharpe

+0

多分何か不足しています。私は事前コミットを使用する場合、それはコミットに失敗し、ユーザーがそれを編集することができますか?私が仕事をすることができた唯一のものは事前受信です。多分、そのコード例がありますか? – sarit

+0

はい、プレ・コミット・フックに適した動作をしているときに、プレ受信フックを書いています。利用可能なフックのドキュメントを参照してください:https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hooks – jonrsharpe

答えて

0

私が動作するように管理さ唯一の事は、事前に受信

であり、それが正しいアプローチである:あなたがここ(ポリシーを適用サーバー側(GitLabサーバーの場合はGitLab custom hook)のコミットメッセージを確認してください。これはserver-side hookで行われます。

これは、git pushを嘆いて、ユーザーにコミットを修正して、再度プッシュすることを意味します。

事前受信が機能するには、事前コミットと事前受信の両方が必要ですか?

いいえ、事前受信フックだけが必要です。サーバーレベルでは、事前コミットの作業を行うことはできません。すべての開発者に配布して、自分のローカルリポジトリでアクティブ化する必要があります。これは実用的ではありません。

+0

お返事ありがとうございます。 それは私がそれを働かせるようになるならば、開発者のためのフックを配布するための問題ではありません:) pre-receiveはプッシュ後にのみ動作していますが、私はプロセスがコミットレベルで失敗するので、彼のメッセージを編集してもう一度コミットしてください – sarit

+0

プリコミットフックは開発者がローカルでアクティブ化しなければならないので、実際には非常に多くの配布の問題です。 – VonC

+0

バイパスできないサーバー側の事前受信フックとは対照的に、プッシュが失敗する可能性があります。それが正しいアプローチです。 – VonC

関連する問題