Git(ローカル)リポジトリに100MBを超えるファイルをコミットしようとした際に、自動的にエラーメッセージを表示し、コミットをキャンセルする拡張機能です。
この拡張機能は、該当するリポジトリのフォルダをVSCodeで開いた際に自動的に設定されます。
これにより、誤って100Mを超える巨大なファイルをコミットしてしまうことを防ぎ、
「Github(サーバー)へのプッシュ時に巨大ファイルをコミットしていたことに気づき一大事」といったことを事前に防止できます。
- MS-Windows (他の環境での動作は未チェック)
- 拡張機能をインストールするだけで利用可能となります。
とても単純で
-
gitリポジトリなのかどうなのかの判定
「現在開いているフォルダ」の「直下」に「.git/config」というファイルがあるかどうかチェック -
LFS (Github Large File Storage) リポジトリなのかどうなのかの判定
.git/hooks 以下に「post-checkout」「post-commit」「post-merge」「pre-push」の「4ファイル全て」が存在する場合は、何もしない -
pre-commit が既に存在するかどうかの判定
すでに「pre-commit」ファイルが存在する場合は、何もしない -
pre-commit が存在しない場合
以下の内容で「.git/hooks/pre-commit」というファイルを作成
#!/bin/sh
toplevel=$(git rev-parse --show-toplevel)
if [ -z "$toplevel" ]; then
exit 0
fi
if [ -f "$toplevel/.git/hooks/post-checkout" ] &&
[ -f "$toplevel/.git/hooks/post-commit" ] &&
[ -f "$toplevel/.git/hooks/post-merge" ] &&
[ -f "$toplevel/.git/hooks/pre-push" ]; then
exit 0
fi
limit=104857600 # 100MB in bytes
git diff --cached --name-only -z | while IFS= read -r -d $'\0' file; do
file_size=$(stat -c %s "$file" 2>/dev/null)
if [ -n "$file_size" ]; then
if [ "$file_size" -gt "$limit" ]; then
echo "Error: Cannot commit a file larger than 100 MB. Abort commit."
exit 1
fi
fi
done
github100mbyteslimithook で公開されています。
- 100Mを超えるファイルがマルチバイトを含むファイル名(=gitコマンドでエスケープされてしまう)である際に、正しくファイルサイズがチェックできない問題の修正
何らかの原因でファイルサイズが取得できなかった場合に標準エラーに出力してしまう問題を修正
不具合を修正しきれていなかった問題
ファイルに空白スペースがある場合に、ファイルサイズのチェックが正しく動作しない問題を修正
説明文の修正
pre-commitファイルについて、「カレントディレクトリ」が「リポジトリのルート」でなくても機能するように対応
リポジトリのアドレスの変更
アイコン作成
Readme.mdで改行されていなかっため改修
マーケットプレイスへの公開版
試験的な初版