There is a bewildering array of options that can be set via git config
, and that is just the documented ones. Of all of these options, which ones should every developer have set on their box (like user.email
)? And what are the most common ones that should be set in common situations (like core.autocrlf=input
on Windows)? But please stay away from religious arguments (like the only acceptable setting of core.whitespace
being tab-in-indent
).
What should go in a default git config file?
Asked Answered
Your global git config (~/.gitconfig) should really contain the settings that apply to ALL your repositories. Primarily things like user.name
, user.email
, core.editor
, merge
, and diff
should be pretty consistently set. That being said I also like to enable color
, core.pager
, rerere
, rebase.autosquash
and a slew of aliases.
[color]
filemode = false
diff = auto
status = auto
branch = auto
pager = true
[alias]
b = branch
ci = commit
co = checkout
cob = checkout -b
d = diff
l = log
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
lga = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative --branches
st = status
fixup = !sh -c 'git commit -a -m \"fixup! $(git log -1 --format='%s' $@)\"' -
squash = !sh -c 'git commit -a -m \"squash! $(git log -1 --format='%s' $@)\"' -
ri = rebase --interactive
rc = rebase --continue
pr = push gerrit HEAD:refs/for/master
mt = mergetool
[user]
email = REDACTED
name = Matt Henkel
[core]
pager = less -FRSX
excludes = ~/.gitexcludes
editor = vim
[rerere]
enabled = true
autoupdate = true
[rebase]
autosquash = true
[merge]
tool = kdiff3
[mergetool "kdiff3"]
keepBackup = false
trustExitCode = false
[diff]
tool = kdiff3
Rather than a "show me yours and I'll show you mine" do you think you could explain and justify each item? It seems like a very long list full of personlaizations. Which ones should go into "every" config? –
Wadi
The every, as in for everybody, is probably just: user.name, user.email, core.editor, merge, and diff. I simply included my common shared global config for reference. –
Coincidental
Here is an annotated list of several of the most common config settings. Of course, everybody's environment/language/os/git workflow is different so you will likely have to tweak this somewhat but these are some of the most common config variables.
[user]
# these are about the most basic and should pretty much always exist
email = [email protected]
name = Your Name
[core]
# if you use windows
#autocrlf = true
# use aggressive compression
# can make your repo smaller but can also be slow
compression = 9
# lets you define a global .gitignore for all those
# *.swp, *~, *.o, etc things that you're frequently
# sticking in .gitignore
excludesfile = ~/.gitignore_global
# tells git to ignore file permission changes
filemode = false
# lets you tweak the default pager
# see `man less` for the meaning of these flags
pager = 'less -FRSX'
# probably not a good default for most projects,
# but you should uncomment with something based on your needs
#whitespace = tab-in-indent
[color]
# this turns on default colors for many commands
# or you can customize specific colors per command (see [3] for example)
ui = auto
[rerere]
# google `git rerere`, basically git remembers your
# partial merge choices and replays them next time
enabled = true
autoupdate = true
[push]
# lets you say just `git push origin` to push the current branch
default = current
[alias]
# this is the most subjective section
# aliases are useful if you either frequently typo certain words
# or else if you are used to another VC like cvs or svn
co = checkout
ci = commit
st = status
br = branch -av
brdel = branch -D
# Show all of my configured aliases
aliases = !git config --list | grep 'alias\\.' | sed 's/alias\\.\\([^=]*\\)=\\(.*\\)/\\1\\ \t => \\2/' | sort
# pretty much everybody has their favorite log format view
# you can find dozens of variations with a quick google
# here are couple of the most common (the first is my favorite)
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
Answer merged from several sources:
© 2022 - 2024 — McMap. All rights reserved.