dotfiles/gitconfig
Jonny Barnes 3b4b84fb20
Note that followRemoteHEAD invents a URL-less origin
Git materialises a remote from the existence of any remote.<name>.* key,
so remote.origin.followRemoteHEAD makes `git remote` list an origin in
every repo without one - this dotfiles repo included. It reads as a
broken remote to anyone looking, and has now been misdiagnosed as
leftover cruft twice. Nothing is actually wrong: get-url still fails, so
the guards in git-sync and nvim's default_branch() hold. Say so in both
places someone would look.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 21:45:12 +01:00

115 lines
3.7 KiB
Text

[alias]
# list aliases
aliases = !git config --get-regexp 'alias.*' | colrm 1 6 | sed 's/[ ]/ = /' | sort
bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d"
# Reads origin's cached HEAD, which `git sync` and remote.origin.followRemoteHEAD
# below keep pointing at whatever the server currently calls its default.
# --short over cut -d/ -f4, which mangles names like release/1.0.
default-branch = "!git symbolic-ref --short refs/remotes/origin/HEAD | sed 's|^origin/||'"
lg = log --graph --pretty=tformat:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%an %ar)%Creset'
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
lastchange = log -p --follow -n 1
plog = log --graph --pretty='format:%C(red)%d%C(reset) %C(yellow)%h%C(reset) %ar %C(green)%aN%C(reset) %s'
rank = shortlog -sn --no-merges
st = status -sb
# `git sync` is not here - it is bin/git-sync, on the $PATH, which git picks
# up as a subcommand. `git aliases` above will not list it.
tlog = log --stat --since='1 Day Ago' --graph --pretty=oneline --abbrev-commit --date=relative
[apply]
# Detect whitespace errors when applying a patch
whitespace = fix
[filter "lfs"]
# git-lfs stuff
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
[gpg]
# Use OpenSSH to sign commits/tags/etc
format = ssh
[gpg "ssh"]
allowedSignersFile = ~/.ssh/allowed_signers
[help]
# Automatically correct typos in commands
autoCorrect = prompt
[pull]
ff = only
[remote "origin"]
# refs/remotes/origin/HEAD is written once at clone time, and the default
# `create` only fills it in when missing - so a default branch renamed on the
# server (main -> totara-20) leaves every tool reading that ref pointing at a
# branch that may not even exist. `always` re-points it on each fetch, off the
# ref advertisement that fetch already receives, so it costs no extra round
# trip. Only applies to remotes actually named origin.
#
# Side effect: git conjures a remote from the existence of any remote.<name>.*
# key, so this makes `git remote` list a URL-less origin in every repo that
# has not got one - this repo included. Nothing breaks (`git remote get-url
# origin` still says No such remote, which is what the scripts test), but do
# not read that listing as evidence a real origin exists.
followRemoteHEAD = always
[core]
pager = delta --side-by-side --width ${FZF_PREVIEW_COLUMNS-$COLUMNS}
[interactive]
diffFilter = delta --color-only
[include]
path = ~/.config/delta/themes.gitconfig
[delta]
# use n and N to move between diff sections
navigate = true
side-by-side = true
hyperlinks = true
hyperlinks-file-link-format = "idea://open?file={path}&line={line}"
#features = weeping-willow
[merge]
conflictstyle = zdiff3
[diff]
algorithm = histogram
colorMoved = plain
mnemonicPrefix = true
renames = true
[tar "tar.xz"]
command = xz -c
[tar "tar.zst"]
command = zstd -T0 -c
[init]
defaultBranch = main
[column]
ui = auto
[branch]
sort = -committerdate
[tag]
sort = version:refname
[rerere]
enabled = true
autoupdate = true
[rebase]
autoSquash = true
autoStash = true
updateRefs = true
# Machine-local identity and signing config. Untracked, and included last so
# it wins over anything above. Keeps `bootstrap.sh`'s copy of this file
# non-destructive without needing to re-apply values on every shell startup.
[include]
path = ~/.gitconfig.local