9

特定のコミットメッセージ形式を持つようにコミットする人を制限したいのですが、どうすればよいですか?

例えば:Pair_Name|Story_Number|Commit_Message

4

2 に答える 2

11

pre-commit-msg使用できるまたはフックがありcommit-msgます。

commit-msgGitリポジトリにはサンプルフックが付属しています。たとえば、下のサンプルフックはgit/hooks/commit-msg.sample重複したSigned-off-by行をキャッチします。

# This example catches duplicate Signed-off-by lines.

test "" = "$(grep '^Signed-off-by: ' "$1" |
    sort | uniq -c | sed -e '/^[   ]*1[    ]/d')" || {
    echo >&2 Duplicate Signed-off-by lines.
    exit 1
}

フックを有効にするには、フックを実行可能にすることを忘れないでください。


 

架空の例を次に示します。これは、などのコミットメッセージのみを受け入れますlondon|120|something ...

#!/usr/bin/env ruby
message_file = ARGV[0]
message = File.read(message_file)

# $regex = /\[ref: (\d+)\]/

PAIRS = ["london", "paris", "moscow"] # only these names allowed
STORIES = "\d{2,4}"                   # story must be a 2, 3 or 4 digit number
MESSAGE = ".{5,}"                     # message must be at least 5 chars long

$regex = "( (#{PAIRS.join('|')})\|#{STORIES}\|#{MESSAGE} )"

if !$regex.match(message)
  puts "[POLICY] Your message is not formatted correctly"
  exit 1
end

使用中:

$ git ci -m "berlin|120"
[POLICY] Your message is not formatted correctly
$ git ci -m "london|120|XX"    
[POLICY] Your message is not formatted correctly
$ git ci -m "london|120|Looks good."    
[master 853e622] london|120|Looks good.
 1 file changed, 1 insertion(+)
于 2013-01-04T05:53:27.270 に答える
1

注:この種の制限は、gitoliteの一部でもあります(リポジトリにプッシュするときにすべての種類のチェックを許可する承認レイヤー)

「すべてのコミットメッセージのgitgitolite(v3)pre-receiveフック」で1つの例を見ることができます。

gitoliteのアイデアは、特定のユーザーグループに対して、特定のリポジトリにそのフックを簡単にデプロイできることです。

于 2013-01-04T07:04:34.687 に答える