How Core Git Developers Configure Git
Global ignores and editor/IDE files
- Several people like a global ignore file (
$XDG_CONFIG_HOME/git/ignore), e.g. for.DS_Storeor personal.envrc, so they don’t pollute project.gitignores. - Others warn that hiding files only locally can surprise collaborators, since those files aren’t ignored in the repo.
- Strong disagreement over committing editor/IDE directories like
.vscode:- Pro: shared debug/launch/tasks settings benefit all VS Code users; VS Code config is hierarchical and composable.
- Con: repo clutter, tool-specific noise, and lack of similar treatment for other IDEs; prefer
.editorconfigor global config.
Local-only ignores
.git/info/excludeis highlighted as a useful per-repo ignore that doesn’t touch tracked files or shared.gitignore.- Some just put such patterns in their global ignore and force-add when needed.
Diffs, conflict styles, and tooling
- Many readers immediately adopted diff-related settings:
diff.algorithm=histogram,diff.colorMoved,merge.conflictStyle=zdiff3, whitespace highlighting, etc. - Strong praise for three-way conflict styles (
diff3/zdiff3) as making some conflicts solvable or at least mechanically resolvable. - Third-party tools get lots of love: difftastic, delta, diff-so-fancy, bat as pager, kdiff3, etc.
- A few reverted from delta back to plain diffs because pretty output complicates copying patches or small terminals, though piping/redirecting is noted as a workaround.
CLI vs GUI
- Some mostly use VS Code’s Git UI and find it covers 99.9% of needs; graphical diffs and merge UIs are praised.
- Others argue you should gradually learn the CLI because GUIs hide model details and fall short for complex history surgery and debugging.
Branch naming: master vs main
- Sarcastic and serious complaints about the
mainchange: breaks aliases and scripts that assumedmaster, adds noise in logs/CI, and is viewed by some as unnecessary “word policing.” - Specific technical pain around mirrors and symbolic
HEADrefs when upstreams rename/delete default branches. - Counterpoints: Git only changed defaults for new repos; any repo has always been free to use other names; robust tooling shouldn’t hardcode
master. Some simply prefer “main” as shorter/nicer.
Config philosophy, safety, and defaults
- Many share custom configs and aliases (
lgfancy logs,outfor unpushed commits, “quick push” functions). - Divided views on “clearly better” options:
fetch.prune/ pruning: fans want remotes to mirror reality; critics fear losing recoverable data and insist deletions stay manual.push.autoSetupRemote: some like auto-publishing branches; others insist this should remain explicit.
- Wishes for versioned “modern defaults” profiles instead of touching long-stable defaults.
- Safety suggestions include always using
--force-with-lease(often via alias) and enabling commit/tag signing with SSH-based GPG.
Git’s evolution
- One commenter assumes Git is unchanged in 15 years; replies point out that many highlighted configs are fairly recent quality-of-life features, and that deeper changes like a new hash algorithm are in progress.