Skip to content

Commit 1f18ed5

Browse files
committed
Normalise line endings to LF
1 parent 1397ea5 commit 1f18ed5

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

.gitattributes

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# .gitattributes — line-ending normalisation
2+
#
3+
# WHY THIS EXISTS
4+
# ===============
5+
# `git add` on Windows warned "LF will be replaced by CRLF the next time Git touches
6+
# it" for every file in a batch, which means core.autocrlf is rewriting on checkout.
7+
# Git stores LF in the repository either way, so nothing is corrupt — but the
8+
# consequences are worth removing:
9+
#
10+
# * The working tree stops matching the repository byte-for-byte, so any hash or
11+
# byte comparison between a Windows checkout and a Linux CI runner disagrees for
12+
# reasons that have nothing to do with content. That is exactly the kind of noise
13+
# that hides a real difference: four files in this repository were once a revision
14+
# behind, and finding that meant hashing every .py file against a known-good copy.
15+
# * A file that must not carry CRLF eventually does. A shell script with CRLF fails
16+
# in a container with "\r: command not found", and a here-doc or a signature block
17+
# with a stray \r fails in ways that read as a logic bug.
18+
#
19+
# eol=lf rather than bare `text=auto`: this pins LF in the WORKING TREE too, on every
20+
# platform, so a Windows checkout is byte-identical to what CI tests. Every editor
21+
# that matters handles LF on Windows.
22+
#
23+
# AFTER ADDING THIS, RENORMALISE ONCE:
24+
# git add --renormalize .
25+
# git status # expect nothing, or line-ending-only changes
26+
# git commit -m "Normalise line endings to LF"
27+
* text=auto eol=lf
28+
29+
# Generated. Kept out of diffs and out of language statistics; it is still committed,
30+
# because without it CI resolves dependencies fresh on every run and the build is not
31+
# reproducible.
32+
uv.lock -diff linguist-generated=true
33+
34+
# Binary. Never transformed, never diffed as text.
35+
*.png binary
36+
*.jpg binary
37+
*.jpeg binary
38+
*.gif binary
39+
*.ico binary
40+
*.pdf binary
41+
*.docx binary
42+
*.pptx binary
43+
*.xlsx binary
44+
*.zip binary
45+
*.whl binary
46+
*.gz binary
47+
*.p12 binary
48+
*.pfx binary
49+
50+
# Vendored browser libraries for the console: shipped as-is, excluded from language
51+
# statistics so the repository does not read as mostly JavaScript.
52+
gui/static/vendor/** linguist-vendored=true
53+
54+
# Documentation figures are generated by docs/make_arch_diagrams.py and the Mermaid
55+
# sources in docs/diagrams-src; diffing them as text is meaningless.
56+
docs/diagrams/** binary

0 commit comments

Comments
 (0)