#git #git-hooks

dev mit-hook-test-helper

Testing help tools for git-mit

10 stable releases

new 3.99.2 May 7, 2021
3.99.1 May 3, 2021
3.98.78 Apr 23, 2021

#107 in Development tools

Download history 105/week @ 2021-04-15 25/week @ 2021-04-22 43/week @ 2021-04-29

58 downloads per month
Used in less than 8 crates

CC0 license

147 lines


git-mit is a suite of git hooks. It's aimed to make pair programming, adding issue numbers to your commits, and following good commit message practices something that happens without thinking about it.


Preparing the repository

This works via git hooks, so you need these hooks to be present in the git repository you're using to use them.

git init .
git mit-install

This works by symlinking in your repositories hooks directory. You can do this automatically by adding them to your init template. This is the template that git uses to create the .git directory when you run git init.

git mit-install --scope=global

You can also run this on an existing repository, to set up an already checked out repository. You can re-initialise all of your repositories, recursively from the home directory using this command.

find "$HOME" -type d -name .git -exec sh -c 'git init "$1"/..' -- {} \;

Lint list

git mit-config lint available
| Lint                              | Status   |
| duplicated-trailers               | enabled  |
| pivotal-tracker-id-missing        | disabled |
| jira-issue-key-missing            | disabled |
| github-id-missing                 | disabled |
| subject-not-separated-from-body   | enabled  |
| subject-longer-than-72-characters | enabled  |
| subject-line-not-capitalized      | disabled |
| subject-line-ends-with-period     | disabled |
| body-wider-than-72-characters     | enabled  |
| not-conventional-commit           | disabled |
| not-emoji-log                     | disabled |

With only lints that ensure git will work properly enabled by default

git mit-config lint enabled
| Lint                              | Status  |
| duplicated-trailers               | enabled |
| subject-not-separated-from-body   | enabled |
| subject-longer-than-72-characters | enabled |
| body-wider-than-72-characters     | enabled |

You can read more details about this, with examples on the lints page

Centralising lint config

You can add a .git-mit.toml or .git-mit.toml.dist to the root of your repository, and we will read it and try to enable the correct lints (with .git-mit.toml taking precedence).

I recommend you commit .git-mit.toml.dist and add .git-mit.toml to your .gitignore to allow easy local reconfiguration

For example

"pivotal-tracker-id-missing" = true

With this you can enable lints

git mit-config lint status pivotal-tracker-id-missing
| Lint                       | Status  |
| pivotal-tracker-id-missing | enabled |

You can read more about this on the configuring page

Append issue number

In projects it nice to help out your co-workers by linking the commits you're making back to issues in the backlog. This can get a bit tedious to remember though, so here's a command to reduce the amount of typing.

Say you've just made this awesome README.md for Pivotal Tracker ID [#12321513]

# The Best Readme

This is the best readme

If you run

git mit-relates-to "[#12321513]"

Next time you commit

git add README.md
git mit bt
git commit -m "Wrote a great README"

the commit message will contain the ID

git show --pretty='format:author: [%an %ae] signed-by: [%GS] 
%B' -q
author: [Billie Thompson billie@example.com] signed-by: [] 
Wrote a great README

Relates-to: [#12321513]

Read more about this at the relates to page

Setting Authors and Co-Authors

Pairing is a great way to program, and it's even better when you give credit, you can give credit with the mit command

Configure your authors like the example by creating a config at $HOME/.config/git-mit/mit.toml

git-mit-config mit example
name = "Anyone Else"
email = "anyone@example.com"

name = "Billie Thompson"
email = "billie@example.com"
signingkey = "0A46826A"

name = "Someone Else"
email = "someone@example.com"

And you can run

git mit ae bt se

Then next when you make a commit the Co-authored-by trailers will be set of the author initials you selected.

echo "# Hello, world!" > README.md

git add .
git commit --message="Initial Commit" --quiet
git show --pretty='format:author: [%an %ae] signed-by: [%GS] 
%B' -q
author: [Anyone Else anyone@example.com] signed-by: [] 
Initial Commit

Co-authored-by: Billie Thompson <billie@example.com>
Co-authored-by: Someone Else <someone@example.com>
Relates-to: [#12321513]

Notice how the "Relates-to" tag is here even though we didn't trigger it? It's from the example higher on the page, git-mit remembers your author and ticket number for 60 min

For more information on this see the mit page


You can install this with brew! This is the preferred method of installing.

brew install PurpleBooth/repo/git-mit

You can use Cargo too, though this won't install the completions

cargo install git-mit-config
cargo install git-mit
cargo install git-mit-install
cargo install mit-commit-msg
cargo install mit-pre-commit
cargo install mit-prepare-commit-msg

You can also download the latest release and run it.


We generate completions for fish,zsh, and bash. They're installed with the homebrew package. You don't need to do anything to activate them.

You can also manually download them from the releases page.



~263K SLoC