Skip to content

「Gitのローカルのリポジトリ」に 「100MBを超える巨大ファイル」をコミットしようとすると 「自動的にキャンセル」するVSCode拡張機能

License

Notifications You must be signed in to change notification settings

komiyamma/vscode_extension_github100m_limit

Repository files navigation

Github 100MByte Limit Hook v1.4.1 MIT License Windows 10|11

Github 100MByte Limit Hook

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 で公開されています。

Change Log

1.4.1

  • 100Mを超えるファイルがマルチバイトを含むファイル名(=gitコマンドでエスケープされてしまう)である際に、正しくファイルサイズがチェックできない問題の修正

1.4.0

何らかの原因でファイルサイズが取得できなかった場合に標準エラーに出力してしまう問題を修正

1.3.9

不具合を修正しきれていなかった問題

1.3.8

ファイルに空白スペースがある場合に、ファイルサイズのチェックが正しく動作しない問題を修正

1.3.5

説明文の修正

1.3.4

pre-commitファイルについて、「カレントディレクトリ」が「リポジトリのルート」でなくても機能するように対応

1.3.3

リポジトリのアドレスの変更

1.3.2

アイコン作成

1.2.0

Readme.mdで改行されていなかっため改修

1.1.0

マーケットプレイスへの公開版

1.1.0

試験的な初版

About

「Gitのローカルのリポジトリ」に 「100MBを超える巨大ファイル」をコミットしようとすると 「自動的にキャンセル」するVSCode拡張機能

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published