Skip to content
Tech AI Wire

Git 3.0はSHA-256を既定にし、Rustを必須にする

Git 2.56-rc0は2026年9月11日に公開され、その先のGit 3.0は新しいリポジトリをSHA-256、reftable(リフテーブル)、mainブランチへ切り替えます。

著者 Tech AI Wire Team

3 分で読めます

git-scm.com上にあるGitのBreakingChangesの文書ページで、後方互換性を壊すリリースについて説明する節が表示されている画面。

数字で見る

SHA-1 collision attacks the hash change cites: 2015, 2017 and 2020
3
release candidate published on September 11, 2026
2.56

Git 2.56-rc0は2026年9月11日に公開されました。そして、その次のリリースが互換性を壊すほうです。Git自身の互換性変更の文書は、バージョン3.0が新しいリポジトリで何を変えるかを列挙しています。ハッシュはSHA-1ではなくSHA-256になり、参照はreftable形式で保存され、最初のブランチ名はmainになります。さらに、Gitのビルドにはrustが必要になります。Phoronixはこのリリース候補を伝え、Git 3.0を2026年末ごろと見ています。

これらの既定値はいずれも、変更後に作られたリポジトリにのみ適用されます。既存のリポジトリはこれまでどおり動きます。

変わる4つの既定値

既定値現在Git 3.0
ハッシュ方式SHA-1SHA-256
参照の保存filesreftable
最初のブランチ名mastermain
safe.bareRepositoryallexplicit

ハッシュの変更には、安全性の根拠があります。Gitの文書はSHA-1への攻撃を3つ名指ししています。2015年のSHAppening、2017年のSHAttered、2020年のShamblesです。バージョン管理でのハッシュ衝突は、異なる2つのオブジェクトが同じ識別子を名乗れることを意味します。

reftableは、参照ごとにディスク上のファイルを置く古い方式を置き換えます。Gitの文書は理由を2つ挙げます。大文字と小文字を区別しないWindowsやmacOSのファイルシステムでも正しく動くこと、そして参照の多いリポジトリで速いことです。

safe.bareRepositoryallからexplicitへ変わるのは小さな変更ですが、実際の攻撃が背景にあります。現在の既定値では、Gitはディレクトリツリーのどこにあるbareリポジトリも見つけてしまいます。攻撃者が作業ディレクトリの中に置いたものも含みます。

Rustが必須になる

Rustの必須化は一度にではなく段階的に進みます。Gitの文書はその順番を説明しています。Rust対応はGit 2.52で自動検出され、2.55で既定で有効になり、3.0で必須になります。

これはGitを、同じ一歩を踏み出した他の基盤ソフトと並べます。Ubuntuは次の版でGNU coreutilsをRust実装へ置き換えています。珍しいプラットフォームでGitをソースからビルドする人にとって、Rustのツールチェーンは選択肢ではなく前提になります。

Git 3.0は、長く非推奨だった機能も削除します。git pack-redundantgit whatchanged、graftファイルの対応、そして古いリモート保存の仕組みなどです。

2.56自体に入るもの

2.56のリリースノートは、主に性能と土台の話です。git statusの途中で行うルーズオブジェクトの列挙は、計算量が二乗からO(n log n)へ下がります。マージベースの計算は可能なところで早く打ち切るようになり、ノートはこれを大きな高速化と表現しています。

新しい操作面も1つあります。git refsに、参照の作成、削除、更新、名前変更のサブコマンドが加わりました。git statusの助言文は、ブランチと上流が分岐したとき、提案するgit pullにリモート名とブランチ名を添えるようになります。

Phoronixは、2.56がSwift向けの差分パターンも追加し、属性、修飾子、失敗可能イニシャライザ、ジェネリクスを扱うこと、そしてORTマージバックエンドを壊れたツリーに対して強化したことを伝えています。その下では、グローバル変数をリポジトリごとの状態へ置き換える作業が続いています。これは差し替え可能なオブジェクトデータベースへの下地です。

これが開発者にとって意味すること

互換性の問いは、自分のGitが動くかではなく、使っているホスティングが動くかです。SHA-256のリポジトリは、それに触れるすべて、つまりホスティング事業者、CIのランナー、オブジェクトIDを解釈するあらゆるツールに理解される必要があります。新しい既定値でリポジトリを作る前に、その経路を試してください。

自分のコードに、ハッシュ長を決め打ちした箇所がないか確かめてください。16進40文字は、20年にわたってスクリプト、正規表現、データベースの列に埋め込まれてきました。SHA-256のオブジェクト名は64文字であり、varchar(40)は単に切り捨てます。

ブランチやタグが数千あるリポジトリを抱えているなら、reftableは早めに採用する価値があります。効果が出るのはそこだからです。ブランチ名の既定値の重みは最も小さいでしょう。多くのチームは何年も前に設定済みで、変更後に作ったリポジトリも1つのコマンドで名前を変えられます。

出典

  1. Git 2.56-rc0 Released With Updated Contribution Guidelines, Improvements For Swift - Phoronix
  2. Git 2.56 release notes - Git project
  3. Git BreakingChanges documentation - Git project

関連記事

An ink line-art drawing of two robotic hands meeting in a handshake, with a small open padlock at one wrist in red.
Coding

Rustls 0.23.45、2024年からのTLS 1.3不具合を修正

0.23.13から0.23.44までのバージョンが、誤った暗号化レベルのTLS 1.3ハンドシェイク(接続確立のやり取り)メッセージを受け入れていました。原因は2024年9月に入った不具合です。