# Global Git configuration file. # Copyright (C) 2011-2018 Simon Ruderich # # This file is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . [user] name = Simon Ruderich email = simon@ruderich.org [color] ui = auto [color "diff"] # Meta information. meta = yellow bold # Hunk header. frag = magenta bold # Function in hunk header. func = blue bold # Removed lines. old = red bold # Added lines. new = green bold # Commit headers. commit = cyan [color "grep"] # GNU grep-like colors. filename = magenta linenumber = green [core] editor = vim [pager] # Use pager for the following commands. status = true tag = true [interactive] # Don't require in interactive commands which require only a # single key, for example `git add --patch`. Requires Perl module # Term::Readkey. singlekey = true [alias] ## Shortcuts for often used commands. # ## Local. c = commit --verbose ca = commit --verbose --amend cad = commit --verbose --amend --date=now d = diff dw = diff --color-words ds = diff --stat dc = diff --cached dcw = diff --cached --color-words dcs = diff --cached --stat g = grep gi = grep --ignore-case s = status l = log ls = log --stat lp = log --patch lpw = log --patch --color-words ld = show --date=short -s --pretty='format:%h (\"%s\", %ad)' # describe a = add ap = add --patch au = add --update rs = reset rsh = reset --hard rsp = reset --patch rv = revert cl = clean -ndx clf = clean -fdx ## Branches. co = checkout b = branch -a -v br = branch m = merge mo = merge origin/master re = rebase rei = rebase --interactive rec = rebase --continue cp = cherry-pick ## Submodules. sm = submodule ## Remote. f = fetch t = tag p = push # Parallel git remote update. Also strips unnecessary output. ru = "! git remote \ | xargs -d '\\n' -n1 -P0 git remote update 2>&1 \ | sed '/^$/d; \ /^Please make sure you have the correct access rights$/d; \ /^and the repository exists\\.$/d;'" # Push to all remotes. Thanks to albel727 in #git on Freenode # (2011-06-04 16:06 CEST) for the idea. Modified to push in parallel # and to strip unnecessary output. rp = "! git remote \ | xargs -d '\\n' -n1 -P0 git push 2>&1 \ | sed '/^$/d; \ /^Please make sure you have the correct access rights$/d; \ /^and the repository exists\\.$/d;'" ## Patches. fp = format-patch ## Maintenance. # (Redirection of stderr is necessary to prevent missing output with # my "color stderr" solution in Zsh.) fs = ! git fsck --strict --full 2>&1 fg = ! git fs && git gc --aggressive 2>&1 # fsck and compress repo ## Misc. sl = stash list ss = stash push ssk = stash push --keep-index ssu = stash push --include-untracked sa = stash apply --index sp = stash pop --index ## Custom commands. # # tig-like log view. Similar to the following but with author/date # information. --pretty=format is not used because it doesn't allow # precise enough control over formats and colors. # # tig = log --pretty=oneline --graph --all --decorate --abbrev-commit tig = ! PWD/bin/tig.pl # Create backup of uncommitted and untracked changes. ssb = "! git stash push --include-untracked \ -m \"Backup on $(LANG=C date '+%a, %d %b %Y %H:%M:%S %z')\" \ >/dev/null \ && git stash apply >/dev/null" # Display list and content of untracked files. Untracked directories # and symbolic links are only listed. u = "! git ls-files --other --exclude-standard --directory -z \ | xargs -0 sh -c '\ for x; do \ printf \"\\033[1;33m-> %s\\033[0m:\" \"$x\"; \ if test -d \"$x\"; then \ echo \" directory\"; \ elif test -h \"$x\"; then \ echo \" symbolic link\"; \ else \ echo; \ cat \"$x\"; \ fi; \ echo; \ done' argv0 \ | less" [diff] # Detect copies and renames. renames = copy # Diff algorithm to use. algorithm = histogram # Highlight moved code in a different color. colorMoved = zebra # Replace "a/" and "b/" prefix in diffs with characters describing the # context (e.g. "i/"ndex and "w/"ork tree). mnemonicprefix = true # Change the definition of a word as used by diff --color-words to be # shorter (not only spaces) and thus simplify the generated diffs. # Words ([a-zA-Z0-9_]+) are matched, or a single non-word character # ([^a-zA-Z0-9_]), therefore changes to words are shown in complete # (e.g. from "word" to "newword" as "[-word-]{+newword+}"), but # changes to non-word characters are shown character wise (e.g. from # "==" to "!=" as "[-=-]{+!+}="); [-..-] is removal, {+..+} is # addition. See t/ for some tests and examples. wordRegex = [a-zA-Z0-9_]+|[^a-zA-Z0-9_] # Rules to allow diffing of some binary files. Disabled by default to prevent # programs from running them on arbitrary files via a .local .gitattributes # file. Copy them to .git/config of the repository to enable them. # # "sh -c '..' ARGV0" is used when the programs require additional arguments # which are passed after ARGV0 by git. #[diff "gzip"] # textconv = gzip -d -c #[diff "pdf"] # textconv = sh -c 'exec pdftotext "$@" -' ARGV0 #[diff "sqlite"] # textconv = sh -c 'exec sqlite3 "$@" .dump' ARGV0 [log] # Display branches/tag names in log (same as log's --decorate option). decorate = short # If a single file is given to `git log`, automatically use --follow. follow = true [merge] tool = vimdiff # Merge upstream branch if `git merge` is called without arguments. defaultToUpstream = true [rebase] # Use single-letter command names in git rebase -i which are faster to # change. abbreviateCommands = true [push] # When running git push without a refspec push only the current # branch, see man page git-config(1) for details. Default since Git # 2.0. default = simple [format] # When using git format-patch use threads and add all patches as # replies to the first one. thread = shallow [transfer] # Automatically fsck objects when receiving them (respected by git # receive-pack and git fetch (>= 1.7.8, for fetch)). fsckObjects = true [advice] # Disable annoying advice messages. waitingForEditor = false [init] # Don't create .git/hooks with any sample hooks. Reduces the clutter # in new git repositories. templateDir = # NON-GIT SETTINGS [annex] # My SSH config already uses ControlMaster where appropriate. sshcaching = false # vim: ft=gitconfig