首页 > 其他分享 >git 禁止大文件提交到仓库中

git 禁止大文件提交到仓库中

时间:2024-07-27 14:07:50浏览次数:15  
标签:bat git 仓库 hooks hard limit 提交 soft

方式 1 在服务器进行设置

如这里(gitlab 服务搭建小记 - J.晒太阳的猫 - 博客园)提到的

但是,这个只能限制提交到服务器,本地提交代码时无法拦截

方式 2 使用 git hooks

编写 git hooks 脚本

以下脚本来自:Git禁止大文件提交到仓库中 | Yunfeng's Simple Blog

修改仓库下的 .git/hooks/pre-commit 为如下内容(如果没有这个文件请新建)

#!/bin/sh
hard_limit=$(git config hooks.filesizehardlimit)
soft_limit=$(git config hooks.filesizesoftlimit)
: ${hard_limit:=10000000} # 10M
: ${soft_limit:=1000000} # 1M

list_new_or_modified_files()
{
    git diff --staged --name-status|sed -e '/^D/ d; /^D/! s/.\s\+//'
}

unmunge()
{
    local result="${1#\"}"
    result="${result%\"}"
    env echo -e "$result"
}

check_file_size()
{
    n=0 
    while read -r munged_filename
    do
        f="$(unmunge "$munged_filename")"
        h=$(git ls-files -s "$f"|cut -d' ' -f 2)
        s=$(git cat-file -s "$h")
        if [ "$s" -gt $hard_limit ]
        then
            env echo -E 1>&2 "ERROR: hard size limit ($hard_limit) exceeded: $munged_filename ($s)"
            n=$((n+1))
        elif [ "$s" -gt $soft_limit ]
        then
            env echo -E 1>&2 "WARNING: soft size limit ($soft_limit) exceeded: $munged_filename ($s)"
        fi
    done

    [ $n -eq 0 ] 
}

list_new_or_modified_files | check_file_size

通过 git config 命令来设置 soft_limit 和 hard_limit 的值

git config hooks.filesizehardlimit 20000000
git config hooks.filesizesoftlimit 2000000

将脚本放在仓库中管理

在仓库根目录,新增 githooks 目录,将 pre-commit 放在其中,新建一个 install.bat 脚本

@echo off
setlocal enabledelayedexpansion

REM 获取当前运行的 BAT 文件名
set currentBatFile=%~nx0

REM 目标目录
set targetDir=..\.git\hooks

REM 检查目标目录是否存在,不存在则创建
if not exist "%targetDir%" (
    echo target path %targetDir% not exist
    exit /b 1
)

REM 遍历当前目录的所有文件
for %%f in (*) do (
    REM 跳过当前运行的 BAT 文件
    if not "%%f"=="%currentBatFile%" (
        REM 拷贝文件到目标目录,存在同名文件则覆盖
        copy /Y "%%f" "%targetDir%"
    )
)

echo git hooks copy finish
:: pause

----
----\githooks
--------pre-commit
--------install.bat

运行 install.bat, 会将 githooks 中的全部文件(除了 install.bat 文件本身)拷贝到 .git\hooks 目录中

遗憾的是,需要手动运行 install.bat,可以结合具体项目情况,找个时机自动调用 install.bat

比如前端项目可以使用 husky

参考

Git禁止大文件提交到仓库中 | Yunfeng's Simple Blog

标签:bat,git,仓库,hooks,hard,limit,提交,soft
From: https://www.cnblogs.com/jasongrass/p/18326879

相关文章

  • gitlab 服务搭建小记
    给团队搭建一个内网gitlab服务......
  • gitlab以及分支管理
    一、分支概念每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,而master才是指向提交的,所以,HEAD指向的就是当前分支。开始的时候,master分支是一条线,Git......
  • 数据仓库建模工具之一——Hive学习第七天
    5、Hive内置函数(分区和排序后面学习hive中的函数)UDF:一对一UDTF:一对多UDAF:多对一https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF--1.查看系统自带函数showfunctions;--2.显示自带的函数的用法descfunctionxxxx;--3.详细显示自带的函数的......
  • CF585F Digits of Number Pi 题解
    Description给定长度为\(n\)的数字串\(s\)和长度为\(d\)的不含前导零的数字串\(x,y(x\ley)\)。求存在长度至少为\(\left\lfloor\frac{d}{2}\right\rfloor\)的子串是\(s\)的子串的数字串\(t\in[x,y]\)的数量。\(n\le10^3\),\(d\le50\),答案对\(10^9+7\)取......
  • 11、Git之自建项目托管平台(GitLab)
    11.1、简介Github是国外的项目托管平台,由于网络问题,在国内访问和使用不是很方便。Gitee是国内的项目托管平台,虽然在访问和使用上挺方便的,但依然让人担忧项目代码可能会被泄露。因此,从企业或机构的角度出发,是倾向于在内部自建一个项目托管平台,将绝对管理权控制在自己手中的。......
  • 【github】使用KeepassXC 解决github Enable two-factor authentication (2FA) 第二因
    下载https://github.com/keepassxreboot/keepassxc/releases/download/2.7.9/KeePassXC-2.7.9-Win64.msi代理地址https://dgithub.xyz/keepassxreboot/keepassxc/releases/download/2.7.9/KeePassXC-2.7.9-Win64.msi由于该软件不允许截图,以下操作参考官网创建数据库 Kee......
  • 使用git工具管理泰山派内核源码目录及抽打补丁简易流程
    目录使用git工具管理泰山派内核源码目录及抽打补丁简易流程一、使用git维护源码二、git常用的一些操作三、抽补丁四、打补丁五、补充使用git工具管理泰山派内核源码目录及抽打补丁简易流程最近,在做linux开发的过程中入手了一块泰山派RK3566的开发板,在官方提供的各......
  • 【Git学习】概念+原理+常用命令(简洁,快速上手)
    本篇文章是我看完尚硅谷视频后作的总结,分享一下学习笔记。        软件配置管理(SCM)是指通过执行版本控制、变更控制的规程,以及使用合适的配置管理软件来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护        版本控制:软件版本,......
  • Gitlab以及分支管理
    一、概述Git是一个分布式版本控制系统,用于跟踪文件的变化,尤其是源代码的变化。它由LinusTorvalds于2005年开发,旨在帮助管理大型软件项目的开发过程。二、Git的功能特性Git是关注于文件数据整体的变化,直接会将文件提交时的数据保存成快照,而非仅记录差异内容,并且使用S......
  • Git的一些基本用法
    本文分享自天翼云开发者社区《Git的一些基本用法》,作者:l****n基本操作gitbranch查看当前分支gitbranch-a查看所有分支gitpull更新当前分支gitcheckoutXXX切换到某分支gitcheckout.放弃所有更改gitlog--pretty=oneline查看当前分支的commitid(或者gitrev-......