Mailmap - All Four Rewrite Forms
One line for each of the four rewrite forms git's mailmap supports, including the two-pair form that matches on the commit name as well as the email. Four aliases collapse onto three canonical authors, which is exactly the transformation a shortlog or contributor report has to reproduce.
# All four forms the format allows, one per line.
# 1. proper name only, matched on commit email
Miguel Otero <miguel.otero@example.invalid>
# 2. proper email only, matched on commit email
<priya.raman@example.invalid> <praman@example.invalid>
# 3. proper name and email, matched on commit email
Ada Fernsby <ada.fernsby@example.invalid> <ada@laptop.example.invalid>
# 4. proper name and email, matched on BOTH commit name and commit email
Ada Fernsby <ada.fernsby@example.invalid> Ada F <ada.f@example.invalid>
Ada Fernsby <ada.fernsby@example.invalid> ada <ada@ci.example.invalid>
Specifications
- Seed
- 20260807
- Repository Name
- .mailmap
- Rules
- 5
- Forms
- 4
- Identities Coalesced
- 4
- Canonical Authors
- 3
- Line Endings
- LF
- Encoding
- UTF-8
Testing contract
Expected to pass- Scenario
- Apply the mailmap to a commit authored by 'ada <ada@ci.example.invalid>'.
- Expected result
- The author is rewritten to Ada Fernsby <ada.fernsby@example.invalid>; the five rules resolve four aliases onto three distinct people.
What is a .txt file?
TXT is a plain-text file containing unformatted character data with no styling or structure beyond line breaks. Its interpretation depends on character encoding, most commonly UTF-8, and on line-ending convention. It is the most universal and portable text container.
How to use this file
Use an example TXT to test encoding detection, line-ending (LF versus CRLF) handling, and any tool that reads or streams raw text input.
How to use this file for testing
“Mailmap - All Four Rewrite Forms” is a deterministic Novus Examples fixture for Config parsing, Config testing, Visual diff / regression. TOML and INI configuration files with nested sections and typed values — for testing config parsers and loaders.
Documented properties for this file: seed 20260807 · UTF-8 · LF. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Diff and patch fixtures name their target paths and the exact edge case they exercise — rename, mode change, binary hunk, CRLF↔LF, or missing trailing newline. Apply or render them against the documented before-state; every author, path, and hash is fictional.
Point your config loader at the file and assert it reads the documented sections and typed values, including any deliberately-tricky nesting or comments.
Related files
- txtCODEOWNERS - Overlapping Globs With Documented WinnersDeliberately overlapping rules so every interesting path matches two or three of them, which is the only way to test that a resolver applies last-match-wins rather than most-specific-wins. One rule has no owners at all, which clears inherited ownership instead of adding any.

- gitattributesGitattributes - LFS Filters, Linguist Hints and export-ignoreThe non-EOL half of the format: LFS filter/diff/merge triples, `linguist-generated` and `linguist-vendored` hints that hide files from language statistics and review, `export-ignore` entries that drop paths from `git archive`, and a `merge=union` driver for an append-only changelog. Attribute values are unquoted and space-separated, so column alignment is whitespace a parser must collapse.

- gitconfigGitconfig - includeIf Conditions in Four FlavoursEvery conditional-include form git supports — path prefix, case-insensitive path prefix, branch glob, and a condition on an existing remote URL — plus one unconditional include. Order matters: a later include overrides an earlier one, so a parser that gathers includes into a set rather than a list resolves the wrong identity.

- gitconfigGitconfig - Sections, Quoted Subsections and Shell AliasesA realistic global config exercising the whole INI-like grammar: bracketed sections, quoted subsection names that are case-sensitive while section names are not, values with size suffixes, a shell alias whose leading `!` changes how the rest is executed, and both comment characters.

- gitignoreGitignore - Escaped #, !, Bracket and Trailing SpaceEvery escape the format defines, including the one nobody expects: a trailing space is stripped from a pattern unless it is backslash-escaped, so `draft\ ` and `draft` ignore different files. Editors that trim trailing whitespace on save silently change what this file means.

- gitignoreGitignore - Globstar, Anchors and Character ClassesOne pattern per rule in the gitignore grammar: a leading slash that anchors to the containing directory, the same name unanchored, `**` in all three positions, `?` and `[...]` classes, and a trailing slash that matches only directories. Every line is a separate assertion for a matcher's test suite.

Generated by generation/version_control.py. Free for any use, no attribution required — license.