When working with
git, there’s quite a few different settings that you can set to change your experience. A lot of people know about the defaults of
user.email for identification, but there’s loads more that you can set up.
Below, is a (mostly complete) copy of my
~/.gitconfig file. As well as identifying myself, I’ve added a few useful aliases, added colouring and configured which utilities to use for common actions.
My favourite option is probably
help.autocorrect. Without it, git suggests a command close to the one you typed, but makes you type it yourself. With this enabled, it just runs it:
$ git stats WARNING: You called a Git command named 'stats', which does not exist. Continuing under the assumption that you meant 'status' in 0.1 seconds automatically...
As well as that, I force any repositories that I own to be checked out as read/write, rather than read only. It’s something I don’t do much, but I don’t even have to worry about it now.
# Any GitHub repo with my username should be checked out r/w by default # http://rentzsch.tumblr.com/post/564806957/public-but-hackable-git-submodules [url "[email protected]:mheap/"] insteadOf = "git://github.com/mheap/"
When looking at the alias section, you might notice that some of the commands start with a
!. This means “run the following as a shell command”. As it can be anything that can be executed, you can even provide a path to a script to run. In my
.gitconfig, I run a script from
~/.dotfiles/bin. I say use the
$ZSH variable from the environment as the base path for the script. Anything you can do on the CLI, you can do in your
[alias] wtf = !$ZSH/bin/git-wtf
You can find all of the git scripts in my dotfiles repository. They’re the ones that start with
# This is me [user] name = Michael Heap email = [email protected] # Set up some useful aliases [alias] co = checkout ci = commit sl = !git shortlog -sn lg = !git log --graph --pretty=oneline --abbrev-commit --decorate wtf = !$ZSH/bin/git-wtf # Add colour to ALL THE THINGS [color] diff = auto status = auto branch = auto ui = true [core] # Set up a global excludes file excludesfile = ~/.gitignore # Which apps do I want to use with git? editor = vim pager = less -r # Don't warn about whitespace conflicts when applying a patch [apply] whitespace = nowarn # Autocorrect anything I typo [help] autocorrect = 1 # Any GitHub repo with my username should be checked out r/w by default # http://rentzsch.tumblr.com/post/564806957/public-but-hackable-git-submodules [url "[email protected]:mheap/"] insteadOf = "git://github.com/mheap/"
For completeness, here’s my personal
~/.gitignore file too
.DS_Store .svn *~ *.swp *.rbc
Michael is a polyglot software engineer, committed to reducing complexity in systems and making them more predictable. Working with a variety of languages and tools, he shares his technical expertise to audiences all around the world at user groups and conferences. You can follow @mheap on Twitter