Tara Roys Tara Roys - 2 months ago 12
Git Question

How do I enforce the 50 character commit summary line in Sublime?

As a naturally talkative soul, my summary lines almost always exceed 50 characters. How do I enforce a 50 character limit on my title lines in sublime for commit messages and commit messages only? Is there a way to customize the settings?


A plugin like sublime-text-git would impose a soft wrap on git commit message:

  "rulers": [70]

But that applies to all the lines, not just the first one.

You could modify that plugin to change colors when you type (but that would require some python programming); this is what an editor like vim does:


Remember that for previous lengthy message, you can view them with the appropriate length through a LESS option. See "How to wrap git commit comments?".

Otherwise, as commented by larsks, a commit-msg hook like this one (from Addam Hardy, in python) is the only solution to really enforce that policy.


import sys, os
from subprocess import call

print os.environ.get('EDITOR')

if os.environ.get('EDITOR') != 'none':
  editor = os.environ['EDITOR']
  editor = "vim"

message_file = sys.argv[1]

def check_format_rules(lineno, line):
    real_lineno = lineno + 1
    if lineno == 0:
        if len(line) > 50:
            return "Error %d: First line should be less than 50 characters " \
                    "in length." % (real_lineno,)
    if lineno == 1:
        if line:
            return "Error %d: Second line should be empty." % (real_lineno,)
    if not line.startswith('#'):
        if len(line) > 72:
            return "Error %d: No line should be over 72 characters long." % (
    return False

while True:
    commit_msg = list()
    errors = list()
    with open(message_file) as commit_fd:
        for lineno, line in enumerate(commit_fd):
            stripped_line = line.strip()
            e = check_format_rules(lineno, stripped_line)
            if e:
    if errors:
        with open(message_file, 'w') as commit_fd:
            commit_fd.write('%s\n' % '# GIT COMMIT MESSAGE FORMAT ERRORS:')
            for error in errors:
                commit_fd.write('#    %s\n' % (error,))
            for line in commit_msg:
        re_edit = raw_input('Invalid git commit message format.  Press y to edit and n to cancel the commit. [y/n]')
        if re_edit.lower() in ('n','no'):
        call('%s %s' % (editor, message_file), shell=True)