Commit messages

Follow the format:

type(scope): Capitalized, <72 characters, no period

A longer description of paragraph text, as needed.

- Bullet points and other Markdown are okay, too


Most commits are made in pull requests, such that it’s easy to find the discussion on GitHub. As such, it’s not necessary to provide a long narrative, if it exists in a pull request or linked issue.


Feature branches

In general, repositories should have only a default branch and pull request branches. If the repository is a fork, it may have a main branch for the source branch and an opencontracting (or open_contracting) branch for the fork branch.

To start work on an issue, create a branch, following this naming convention:


This makes it easy to know what the changes in a branch are about.


If no issue exists for the work you want to do, please create an issue first.


We recommend using:

# Create a "main" branch (instead of a "master" branch) when creating repositories.
git config --global init.defaultBranch main

# Use --set-upstream (-u) with `git push` by default.
git config --global push.autoSetupRemote true

# See demo at
git config --global merge.conflictstyle zdiff3

# Display dates as 2001-02-03 04:05:06 instead of Sat Feb 3 04:05:06 2001.
git config --global iso

# Detect moved lines better.
git config --global diff.algorithm histogram
# Use different colors for moved lines (minimum 20 characters).
git config --global diff.colorMoved default
# Allow indentation changes when detecting moved lines.
git config --global diff.colorMovedWS allow-indentation-change

# Delete branches/tags locally that were deleted remotely (e.g. after merge on GitHub).
git config --global fetch.prune true
git config --global fetch.pruneTags true

You might also like delta (installed separately).

If you sign commits, tell Git about your signing key, for example:

git config --global commit.gpgsign true
git config --global --unset gpg.program
git config --global user.signingkey ~/.ssh/
git config --global gpg.format ssh
git config --global --unset gpg.format
git config --global user.signingkey 3AA5C34371567BD2
git config --global gpg.program $(which gpg)

Excluded paths

Add the following to your ~/.config/git/ignore file:


In general, use the repository’s .gitignore file, to not rely on each user having configured global exclusions.

Common excluded paths include: