What should go in a default git config file?
Asked Answered
W

2

9

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).

Wadi answered 29/6, 2011 at 3:54 Comment(0)
C
9

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
Coincidental answered 29/6, 2011 at 4:9 Comment(2)
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
N
8

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:

  1. https://githowto.com/aliases
  2. https://www.javacodegeeks.com/2013/06/git-configuration-options-you-cant-miss.html
  3. http://michaelwales.com/articles/make-gitconfig-work-for-you/#colored-output
  4. https://wildlyinaccurate.com/useful-git-configuration-items/
Nonrestrictive answered 26/1, 2015 at 18:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.