Skip to content

chore: no .gitattributes across the org, so line endings are unmanaged #263

Description

@BryanFRD

Tracking issue for a one-line-per-repo fix. Referenced from the PRs rather than duplicated as twenty near-identical issues.

The problem

Most repos in the org have no .gitattributes. With core.autocrlf enabled, a Windows checkout gets CRLF in the working tree while every formatter in the toolchain (prettier, rustfmt, gofmt) writes LF. The result is a permanent, meaningless diff between what is on disk and what the tools produce.

Measured on FerrGames-Cloud: 19 files failed prettier --check and running prettier --write over them produced an empty git diff. Not one had a real formatting problem. The consequence is that nobody trusts the check, so nobody runs it, so real drift accumulates unnoticed and no formatting gate can be added to CI.

What is actually stored

Nothing needs rewriting. Across all 19 checkouts surveyed, zero text files are stored with CRLF in the index; git already normalises on commit. This is purely about what a checkout puts on disk, which is why each fix is a single new file and git add --renormalize . stages nothing.

The fix

* text=auto eol=lf, binaries declared explicitly so their bytes are never inspected, and .bat / .cmd kept at CRLF for cmd.exe.

FerrLabs/ia already carries exactly this rule, with the same reasoning in its comment, so this aligns the rest of the org with an existing precedent rather than inventing one.

Scope

New file (17): Benchmarks, Changelog, Docker-Runners, FerrFleet-Cloud, FerrFlow-Cloud, FerrGames-Discord, FerrGrowth-Cloud, FerrLabs-Cloud, .github, FerrLens-Cloud, FerrTrack-Cloud, FerrVault-Cloud, Infra, Kit, MCP, Status, UI.

Extend an existing partial file (3): FerrFlow, Fixtures and FerrVault (operator) each declare .githooks/* or *.sh only, and so carry the same problem for everything else.

Already correct (1): ia.

FerrGames-Cloud landed first, as FerrLabs/FerrGames-Cloud#1050.

Note for contributors

The first checkout after each merge rewrites line endings across that working tree once. It is local churn and changes no content.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions