BuildEmpire/Totara renamed its default branch from main to totara-20. Nothing local noticed, because refs/remotes/origin/HEAD is written once at clone time and remote.<name>.followRemoteHEAD defaults to `create`, which only fills the ref in when it is missing. So `git default-branch` still said main, as did nvim's diff-against-branch prompt. bin/git-sync does the start-of-work sequence for a fork - fast-forward the default branch from upstream, push it to origin - and works out which branch that is by asking the server, not the cache. It sets the cached HEADs from the answer, so everything reading that ref agrees afterwards. It lives in bin/ rather than as an alias because git picks up git-<name> on the $PATH as a subcommand, and this is more shell than a gitconfig alias should hold. followRemoteHEAD = always is set for origin as well, so an ordinary fetch keeps the ref current without running the script. The nvim prompt now prefers origin, then upstream, then the remaining remotes. It took the first remote alphabetically before, which in be-edition means kdog - a colleague's fork - rather than anything authoritative. Verified against a fixture of bare repos whose default branch is totara-20 and whose cached HEAD is stale: the branch is created tracking origin when absent, fast-forwarded when behind, pushed to the fork, refuses to merge when the local copy has diverged, and is a no-op on a second run. The nvim prompt was checked in three real repos.
109 lines
3.3 KiB
Text
109 lines
3.3 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.
|
|
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
|