2013-01-04 8 views
5

मैं उन लोगों को प्रतिबंधित करना चाहता हूं जो कोई विशिष्ट प्रतिबद्ध संदेश प्रारूप मानते हैं, मैं यह कैसे कर सकता हूं?मैं गिट प्रतिबद्ध संदेशों के लिए एक पैटर्न कैसे सेट करूं?

उदाहरण के लिए: Pair_Name|Story_Number|Commit_Message

उत्तर

8

वहाँ, एक pre-commit-msg या commit-msg हुक है कि आप इस्तेमाल कर सकते हैं:

Git रेपोस नमूना हुक, जैसे के साथ आते हैं नमूना commit-msggit/hooks/commit-msg.sample के तहत हुक डुप्लिकेट साइन-इन-लाइनों को पकड़ता है।

# 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 
} 

एक हुक सक्षम करने के लिए, इसे निष्पादन योग्य बनाने के लिए मत भूलना।

#!/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(+) 
1

नोट:


यहाँ कुछ काल्पनिक उदाहरण है, जो केवल london|120|something ... के संदेशों के लिए प्रतिबद्ध स्वीकार करेंगे और की तरह है इस तरह का प्रतिबंध का gitolite का हिस्सा भी है (authorization layer जो रेपो को दबाते समय सभी प्रकार के चेक की अनुमति देता है)

आप "git gitolite (v3) pre-receive hook for all commit messages" पर एक उदाहरण देख सकते हैं।

गिटोलाइट के साथ विचार यह है कि आप उपयोगकर्ताओं के विशिष्ट समूहों के लिए विशिष्ट प्रतिनिधि पर आसानी से उस हुक को तैनात कर सकते हैं।

संबंधित मुद्दे