Pimp My IDE / garage dispatch
Back to garage
October 1, 2026 | Git 3.0 / object format / compatibility

A longer hash changes more than the dashboard number.

Git plans to make SHA-256 the default object format for new repositories in 3.0. The security case and the migration cost are under live dispute. Your first job is smaller. Find every system that assumes what an object ID looks like.

Treat the hash function as repository identity. Test creation, hosting, automation, stored references, and object exchange before a new default chooses the format for you.

The plan is real. The date is not.

Git's breaking-change document says Git 3.0 will change the default hash for newly created repositories from SHA-1 to SHA-256. It also says there is no planned Git 3.0 release date. The same document calls itself a living record and says earlier decisions can be revisited.[1]

That is enough reason to test. It is not a reason to tell teams that every repository is about to change. Existing repositories keep their format. New repositories get the new default unless the final plan changes or an operator chooses a format.

The decision worth making today is not which side wins the argument. It is whether your tools know the repository format they are operating on.

Object format reaches inside the objects.

Git's transition design says SHA-256 repositories use a repository-format extension. The change affects object names and the object content that refers to other objects. Older Git versions cannot read those repositories. The design proposes a bidirectional mapping between SHA-1 and SHA-256 names for transition work.[2]

Do not reduce this to widening a database column from 40 to 64 characters. Search for validators, regular expressions, cache keys, URL routes, webhook fields, artifact names, signatures, fixture snapshots, abbreviated IDs, and systems that copy an object ID into another store.

Current documentation still marks an exchange gap.

The current git init documentation accepts --object-format=<format>. It warns that SHA-256 repositories and SHA-1 repositories do not interoperate at present. It also documents init.defaultObjectFormat, which means teams can test their own creation path before a major release changes the default.[3]

On this dispatch host, Git 2.43 created both formats. The SHA-1 commit ID had 40 hexadecimal characters and the SHA-256 commit ID had 64. A local fetch from the SHA-1 repository into the SHA-256 repository stopped with mismatched algorithms: client sha256; server sha1. That is one local smoke check, not a forecast for Git 3.0.

The cost argument deserves a test matrix.

Scott Chacon argues that changing the default will impose broad costs while adding little practical security value. His case covers collision attacks, forge support, signatures, dependency references, storage, protocol translation, and the long tail of tools built around SHA-1 object IDs.[4]

The official Git design starts from a different risk judgment. It points to practical SHA-1 collision work, hardened SHA-1 as a mitigation rather than a permanent answer, and the need for object names that remain trustworthy.[2] Do not erase that disagreement with a slogan. Convert each claimed cost and benefit into a fixture your tool can run.

Keep human names above object names.

Object IDs leak into tickets, deployment records, package locks, submodule entries, status pages, and chat. Prefer a branch, tag, release, or repository URL when that is the durable identity you mean. When an exact object is required, store the algorithm beside the full ID.

That will not make incompatible repositories exchange objects. It will stop your own records from silently assuming that every identifier is SHA-1 forever.

Interactive makeover / object-format gearbox

Shift the fixture. Set the gates.

Traditional purpose replaced: a compatibility checklist beside a format dropdown. Better version: one native format selector drives the object-ID cutaway, four independent interlocks keep the test scope visible, and a copyable card preserves missing evidence.

Choose the fixture format

This rig writes a test card. It does not change a repository, contact a forge, or prove interoperability.

Object-format shifter
Evidence sections to request
Format witness

Current test card

0 of 4 sections selected
SHA-140 chars
SHA-25664 chars
HostToolsRefsRecovery

Test card is empty.

Select the evidence sections the compatibility run must include. Real hosts, outputs, and object IDs remain required.

Four places format assumptions hide

Follow the object ID out of Git.

01 / FORGE

Can the remote hold it?

Test repository creation, push, clone, fetch, pull request, webhook, and archive behavior on the real host.

02 / TOOLS

Who parses the ID?

Run IDE, CI, hooks, release, scanner, backup, and package tools against both fixture formats.

03 / RECORDS

Where is forty assumed?

Inspect schemas, regular expressions, URLs, logs, caches, tickets, signatures, and snapshot fixtures.

04 / EXCHANGE

What crosses the boundary?

Exercise mixed-format paths and record the exact failure. Do not infer exchange support from successful local commands.

Sources read

Source log and evidence boundary
  1. Git project, "BreakingChanges", read October 1, 2026. This is the first-party source for the planned Git 3.0 default, the new-repository scope, the lack of a planned release date, and the document's revisable status.
  2. Git project, "hash-function-transition", read October 1, 2026. This supplies the security rationale, repository extension, object-content changes, compatibility mapping design, old-client boundary, goals, and non-goals.
  3. Git project, "git-init", read October 1, 2026. This documents --object-format, init.defaultObjectFormat, and the current warning that SHA-1 and SHA-256 repositories do not interoperate.
  4. Scott Chacon, "Git 3.0's upcoming SHA-256 default will be a costly mistake", published and read October 1, 2026. This is an argued position, not Git project policy. It supplies the cost case around forges, signatures, dependencies, storage, protocol translation, and tool assumptions.
  5. Hacker News discussion for the GitButler article, item ID verified through the Hacker News API and read October 1, 2026. It is included as the current discussion route, not as technical authority.

Local smoke-check boundary. Pimp My IDE used Git 2.43.0 to create one SHA-1 fixture and one SHA-256 fixture, commit the same small file, inspect each full object-ID length, and attempt one local cross-format fetch. The fetch failed with a mismatched-algorithms error. We did not test Git 3.0, a hosted forge, signed objects, submodules, partial clones, production repositories, or third-party integrations. The gearbox selects fields for a future test card. It does not record test evidence.