【问题标题】:How to make Git file size checking faster?如何使 Git 文件大小检查更快?
【发布时间】:2023-02-16 18:03:53
【问题描述】:

我有一个 bash 脚本,用于检查要提交的文件是否符合大小限制。但是,当存在大量文件时,脚本可能需要很长时间才能完成,即使没有超过限制的文件也是如此。

这是原始脚本:

result=0
for file in $( git diff-index --ignore-submodules=all --cached --diff-filter=ACMRTUXB --name-only HEAD )
do
    echo $file
    if [[ -f "$file" ]]
    then
        file_size=$( git cat-file -s :"$file" )
        if [ "$file_size" -gt  "$max_allowed_packed_size" ]
        then
            echo File $file is $(( $file_size / 2**20 )) MB after compressing, which is larger than our configured limit of $(( $max_allowed_packed_size / 2**20 )) MB.
            result=1
        fi
    fi
done
fi
exit $result

您有什么想法可以提高检查暂存文件的性能吗?

【问题讨论】:

  • 由于这个原因,这可能很慢:git cat-file 为什么这样做而不是使用例如wc -cstat?通常,这听起来像是解决不应该存在的问题的方法:为什么要这样做——大文件无意中被添加到存储库的用例是什么?

标签: bash git pre-commit-hook


【解决方案1】:

1.使用Git LFS(大文件存储):Git LFS是一个开源的Git扩展,用文本指针代替大文件。这允许 Git 更有效地处理大文件,从而可以加快文件大小检查。

2.忽略大文件:您还可以通过忽略存储库不需要的大文件来加快文件大小检查。您可以通过在存储库的根目录中创建一个 .gitignore 文件并为您想要忽略的文件或文件类型添加模式来执行此操作。

3.使用浅克隆:浅克隆意味着你只从远程仓库克隆一定数量的提交历史。这可以显着减少您需要下载和检查的数据量,并可以加快文件大小检查。

4.使用 Git 钩子:Git 钩子是在某些 Git 事件发生时自动运行的脚本,例如提交或推送。您可以使用 Git 挂钩来检查新文件或修改文件的文件大小,如果它们超过特定大小限制则拒绝它们。这有助于防止将大文件添加到存储库中,从而节省检查文件大小的时间。

5.使用更快的计算机或网络:如果您的计算机或网络速度较慢,文件大小检查自然会变慢。升级您的计算机或网络可以帮助加快文件大小检查。

【讨论】:

    【解决方案2】:
    $git config --global 
    Install git-sizer
    $git-sizer --help
    $git status   #check status
    

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 1970-01-01
      • 2011-02-28
      • 2010-12-08
      • 1970-01-01
      • 2015-08-15
      • 2022-01-12
      • 2011-01-07
      相关资源
      最近更新 更多