Skip to content

原文(日本語に翻訳)

作業ツリーに大きな未追跡バイナリファイルがある場合のコミット時に数GBのメモリスパイクが発生していた問題を修正しました

原文(英語)

Fixed multi-GB memory spike when committing with large untracked binary files in the working tree

概要

Claude Code がコミットを実行する際、作業ディレクトリに大きな未追跡のバイナリファイル(動画、データセット、大きなアーカイブなど)が存在すると、これらのファイルを不必要にメモリに読み込んでしまい、数GBのメモリスパイクが発生するバグがありました。修正後は未追跡バイナリファイルをメモリに読み込まないようになり、コミット時のメモリ消費が大幅に改善されます。

基本的な使い方

この修正は自動的に適用されます。大きなバイナリファイルがある環境でのコミットが安定して動作するようになります。

bash
# 大きなバイナリファイルがあってもコミットが安定して動作する
# > このファイルをコミットして
# 修正後: メモリスパイクなし

実践例

問題が発生していたシナリオ

bash
# 大きなバイナリファイルが作業ツリーにある状態
ls -lh
# -rw-r--r-- 1 user group 5.2G training-data.csv   ← .gitignore に追加済みだが未追跡
# -rw-r--r-- 1 user group 2.1G model-weights.bin   ← 大きなバイナリ
# -rw-r--r-- 1 user group  10K main.py              ← コミットしたいファイル

# Claude Code でコミットを依頼
> main.py の変更をコミットして

# 修正前:
# → 未追跡のバイナリファイル(5.2GB + 2.1GB)をメモリに読み込み
# → 7GB 以上のメモリスパイク
# → システムが応答しなくなる場合も

# 修正後:
# → 未追跡バイナリファイルはスキップ
# → 最小限のメモリで安全にコミット完了

.gitignore の設定で予防する

bash
# 大きなバイナリファイルは .gitignore に追加
cat >> .gitignore << 'EOF'
# データファイル
*.csv
*.bin
*.h5
data/
models/

# 動画・音声
*.mp4
*.avi
*.wav

# アーカイブ
*.zip
*.tar.gz
EOF

Git LFS の活用

bash
# 大きなバイナリファイルは Git LFS で管理することを推奨
git lfs install
git lfs track "*.bin"
git lfs track "*.h5"
git add .gitattributes
git commit -m "chore: add Git LFS tracking for binary files"

# LFS 管理下のファイルは通常のコミットフローで問題なし

注意点

  • 大きなバイナリファイルは .gitignore に追加するか、Git LFS で管理することを推奨します
  • この修正により、修正前にメモリ不足でクラッシュしていた環境でもコミットが動作するようになります
  • コミット自体はファイルをステージしたものだけを処理するため、未追跡ファイルのサイズはコミットに影響しません
  • ML/データサイエンスプロジェクトで特に効果が大きい修正です

関連情報