[user] name = Robert Günzler email = r@gnzler.io signingkey = AF6AB8C8B10436B9F61293632143BD2AAB94BCC4 [sendemail] from = Robert Günzler smtpServer = mail.gandi.net smtpServerPort = 465 smtpEncryption = ssl smtpUser = robert@gnzler.io ; smtpServer = /usr/bin/msmtp ; smtpServerOption=-a ; smtpServerOption=gnzler annotate = true multiEdit = true confirm = always [credential "git.sr.ht"] username = robertgzr helper = !sh -c 'pass sr.ht/robertgzr | head -n1 | xargs printf "password=%s\n"' [credential "github.com"] username = robertgzr helper = !sh -c 'pass github.com/robertgzr | head -n1 | xargs printf "password=%s\n"' [credential "smtp://mail.gandi.net:465"] username = robert@gnzler.io helper = !sh -c 'pass email/gnzler.io | head -n1 | xargs printf "password=%s\n"' [core] excludesfile = ~/.git/ignore # Treat spaces before tabs and all kinds of trailing whitespace as an error # [default] trailing-space: looks for spaces at the end of a line # [default] space-before-tab: looks for spaces before tabs at the beginning of a line whitespace = space-before-tab,-indent-with-non-tab,trailing-space # Make `git rebase` safer on OS X # More info: trustctime = false # Prevent showing files whose names contain non-ASCII symbols as unversioned. # http://michael-kuehnel.de/git/2014/11/21/git-mac-osx-and-german-umlaute.html precomposeunicode = false filemode = false # enable coditional paging based on the amount of content pager = "less -F -X" [init] defaultBranchName = master # templateDir = ~/.dotfiles/git/templates [commit] # template = ~/.gitmessage gpgsign = true verbose = true [alias] stp = status --porcelain --branch sti = status --porcelain --branch --ignored st = status -sb stl = ls-files -m -o --exclude-standard ci = commit br = branch co = checkout cp = cherry-pick cr = clone --recursive df = diff --word-diff d = "!f() { local a=${1:-HEAD}; local b=${2:-master}; if [[ $a == '-' ]]; then a=HEAD; fi; printf ' %s is %s commits ahead and %s commits behind %s\n' `git rev-parse --short=7 $a` `git rev-list --count $b..$a` `git rev-list --count $a..$b` $b; printf ' last common commit (merge-base): %s\n' `git merge-base $a $b`; git diff --shortstat $a..$b; }; f" unstage = reset --hard HEAD lp = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit ll = log --pretty=oneline --graph --abbrev-commit lm = log --pretty=format:'* %s (%h)' lg = log -p g = grep --break --heading --line-number amend = commit --amend --reuse-message=HEAD --edit contrib = shortlog --summary --numbered show-ignored = "! git clean -ndX | perl -pe 's/Would remove/Ignored:/'" # usage: change-date [rev] [date] [...additional filter-branch flags] # rewrites the commit/author date of to be # if is empty HEAD is used # if is empty the current time is used change-date = "!f() { now=\"$(date +'%a %b %d %H:%M:%S %Y %z')\"; head=\"$(git rev-parse HEAD)\"; git filter-branch $3 --env-filter 'if [[ $GIT_COMMIT = ${1-$head} ]]; then export GIT_AUTHOR_DATE=${2:-$now}; export GIT_COMMITTER_DATE=${2:-$now}; fi'; }; f" # usage: ld # prints out the `git log` for the n last days log-since = "!sh -c \"git log --since '${1:-1} days ago' --oneline --author $(git config user.email)\" -" # usage: pr [] # creates local branch pr/ from origin or and checks it out pr = "!f() { git fetch -fu ${2:-origin} refs/pull/${1:?missing pr num}/head:pr/$1 && git checkout pr/$1; }; f" total-lines = "! git ls-tree -r master --name-only | xargs -I {} git blame --line-porcelain {} | sed -n 's/^author //p' | sort | uniq -c | sort -rn" fixup = "!f() { git commit --fixup=${1}; }; f" squash = "!f() { git commit --squash=${1}; }; f" r = rebase ri = rebase --autosquash -i ri-pr = !bash -c 'git rebase --autosquash -i `git merge-base HEAD ${1:-origin/master}`' pushf = push --force-with-lease root = "rev-parse --show-toplevel" trailer = "!f() { trailer=${1:-}; ref=${2:-HEAD}; mode='--amend'; [ $ref != 'HEAD' ] && mode='--fixup=$ref'; msg=$(git rev-parse --show-toplevel)/LAST_COMMIT_MSG; git log -1 --format=%B $ref > $msg; git interpret-trailers --in-place --trailer $trailer $msg; git commit --allow-empty --no-verify --only --edit --file $msg $mode; rm $msg; }; f" a = add --patch edit = !bash -c 'set -x && git ri "${1:-HEAD}"^' - oldest-ancestor = !bash -c 'diff -u <(git rev-list --first-parent ${1:-master}) <(git rev-list --first-parent ${2:-HEAD}) | sed -ne \"s/^ //p\" | head -1' rebase-onto = !bash -c 'git rebase --onto ${1} `git oldest-ancestor ${2} ${3}` ${3}' - find-by-subject = "!f() { set -ex; s=`git log -1 --format=%s ${1}`; git --no-pager log -1 --grep=\"^${s}$\" --no-merges ${2}; }; f" tig = !tig amend = commit --amend b = !fzfez git-branches l = !fzfez git-log t = !fzfez git-tags [apply] # Detect whitespace errors when applying a patch whitespace = fix [color "branch"] current = yellow reverse local = yellow remote = green [color "diff"] meta = yellow bold frag = magenta bold # line info old = red # deletions new = green # additions [color "status"] added = yellow changed = green untracked = cyan [diff] # Detect copies as well as renames renames = copies renameLimit = 3210 [diff "bin"] # Use `hexdump` to diff binary files textconv = hexdump -v -C renames = copies tool = vimdiff [difftool] prompt = false [fetch] prune = true [pull] rebase = true [grep] lineNumber = true [help] # Automatically correct and execute mistyped commands autocorrect = 10 [merge] # Include summaries of merged commits in newly created merge commit messages log = true defaultToUpstream = true tool = vimdiff [mergetool "vimdiff"] path = /usr/bin/nvim conflictstyle = diff3 prompt = false [rebase] ; instructionFormat = "%aI %an <%ae> | %s" [rerere] enabled = false [push] # Use the Git 1.x.x default to avoid errors on machines with old Git # installations. To use `simple` instead, add this to your `~/.extra` file: # `git config --global push.default simple`. See http://git.io/mMah-w. default = simple # Make `git push` push relevant annotated tags when pushing branches out. followTags = true [tag] gpgsign = true # URL shorthands [url "git@github.com:"] insteadOf = "gh:" insteadOf = "https://github.com/" pushInsteadOf = "github:" pushInsteadOf = "git://github.com/" [url "git@bitbucket.org:"] insteadOf = "bb:" insteadOf = "https://bitbucket.org/" pushInsteadOf = "bitbucket:" pushInsteadOf = "git://bitbucket.org/" [url "git@gitlab.com:"] insteadOf = "gl:" insteadOf = "https://gitlab.com/" pushInsteadOf = "gitlab:" pushInsteadOf = "git://gitlab.com/" [url "git@git.sr.ht:"] insteadOf = "srht:" insteadOf = "https://git.sr.ht/" pushInsteadOf = "srht:" pushInsteadOf = "git://git.sr.ht/" [url "git://github.com/"] insteadOf = "github:" [url "git@gist.github.com:"] insteadOf = "gst:" insteadOf = "gist:" pushInsteadOf = "gist:" pushInsteadOf = "git://gist.github.com/" [http] sslverify = true cookiefile = /home/robert/.gitcookies [trailer "signoff"] key = "Signed-off-by" ifmissing = add ; command = bash -c 'echo \"$(git config user.name) <${$(git config user.signemail):-$(git config user.email)}>\"' command = echo \"`git config user.name` <`git config user.signemail || git config user.email`>\" where = end [trailer "changetype"] key = "Change-type" ifmissing = add ifexists = doNothing where = start [trailer "connects"] key = "Connects-to" ifmissing = add where = start [trailer "depends"] key = "Depends-on" ifmissing = add where = start [trailer "changelog"] key = "Changelog-entry" ifmissing = add where = start [tig "bind"] generic = I !@wl-copy -n "%(commit)" main = g none main = gg :move-first-line main = G :move-last-line diff = g none diff = gg :move-first-line diff = G :move-last-line [includeIf "gitdir:~/devel/balena/"] path = ~/devel/balena/.gitconfig