Git 突破 文件尺寸限制

前言

当Git本地存储里右超过50MB,却又确实需要上传的时候,就需要用到了不是

解决

本代码就是把大文件进行拆解成小文件,然后上传。

等到拉取下来的时候,可以直接再进行合并,合并成原文件

代码如下,仅供参考:

'''
-*- coding: utf-8 -*-
@File  : 文件分割与合并.py
@Author: Shanmh
@Time  : 2024/02/26 下午2:37
@Function: 突破git上传限制,把大文件分割成小文件再上传
'''import os
import shutilfrom natsort import natsortedimport osdef get_file_size(path):return os.path.getsize(path)/(1024*1024)def list_files_and_sizes(directory,max_size):big_list=[]for root, dirs, files in os.walk(directory):for file in files:file_path = os.path.join(root, file)file_size = get_file_size(file_path)if file_size>=max_size:print(f"{file_path}: {file_size:.2f} MB")big_list.append(file_path)return big_listdef list_parts(directory):print("Find all parts , willing combine the parts:")parts_list = []for root, dirs, files in os.walk(directory):for dir in dirs:dir_path = os.path.join(root, dir)if dir_path.endswith(".parts"):parts_list.append(dir_path)print(parts_list)return parts_list
def split_file(input_file, chunk_size):# 读取输入文件的内容os.makedirs(f"{input_file}.parts")with open(input_file, 'rb') as f:data = f.read()# 计算分割的文件数量num_chunks = len(data) // chunk_sizeif len(data) % chunk_size != 0:num_chunks += 1# 分割文件并保存为多个分块文件chunks = [data[i * chunk_size:(i + 1) * chunk_size] for i in range(num_chunks)]for i, chunk in enumerate(chunks):output_file = f'{input_file}.parts/tmp.part{str(i+1).zfill(4)}'with open(output_file, 'wb') as f:f.write(chunk)print(f'Split file: {output_file}')os.remove(input_file)return num_chunksdef merge_files(output_file):# 合并分块文件并保存为输出文件with open(output_file.split(".parts")[0], 'wb') as f:for file in natsorted(os.listdir(output_file)):input_file = f'{output_file}/{file}'with open(input_file, 'rb') as chunk_file:f.write(chunk_file.read())os.remove(input_file)shutil.rmtree(output_file)print(f'Merged file: {output_file}')if __name__ == '__main__':method=1  #如果设置为 1 进行分割大文件, 2 则是进行合并currect_path=os.getcwd() #默认当前目录,可自行更改max_size=50 #MB  大于等于 50 MB 文件split_size=40 * 1024 * 1024  # 分割大小为40MBif method==1:files_list=list_files_and_sizes(currect_path,max_size)for fi in files_list:split_file(fi, split_size)elif method==2:parts_list=list_parts(currect_path)for fi in parts_list:merge_files(fi)

注意:此代码中有删除命令,请确保本程序正常运行后,在运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI赋能Oracle DBA:以自然语言与Oracle数据库互动

DBA AI助手:以自然语言与Oracle数据库互动 0. 引言1. AI赋能Oracle DBA的优势2. AI如何与Oracle数据库交互3. 自然语言查询的一些示例4. 未来展望 0. 引言 传统的Oracle数据库管理 (DBA) 依赖于人工操作,包括编写复杂的SQL语句、分析性能指标和解决各种…

分布式ID生成方案详解

✨✨ 祝屏幕前的您天天开心 ,每天都有好运相伴。我们一起加油!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. UUID(Universally …

企业文件防泄密软件哪种软件比较好?——推荐@德人合科技 | 天锐绿盾终端数据安全防泄密管理系统!

德人合科技提供的天锐绿盾终端数据安全防泄密管理系统是一款比较好的企业文件防泄密软件。 ——首页———— www.drhchina.com—— 以下是一些关于该软件的优点: 强大的防泄密功能:该软件采用动态加解密技术,能够在文件创建、编辑存盘时自动…

代码随想录算法训练营day24

题目:77. 组合 参考链接:代码随想录 回溯法理论基础 回溯三部曲:回溯函数模板返回值以及参数、回溯函数终止条件、回溯搜索的遍历过程。 模板框架: void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&…

【Android】反编译APK及重新打包

1.下载 APK 反编译工具 首先,需要下载一个 APK 反编译工具,例如 Apktool。可以在官网(https://apktool.org/docs/install)上下载最新版本的 Apktool,也可以使用包管理器来安装。 2.反编译 APK 文件 将要修改包名的 …

Ubuntu中matplotlib显示中文的方法

其实有很多朋友已经总结得很好了:Ubuntu下让matplotlib显示中文字体_ubuntu matplot 使用汉字-CSDN博客 这里我就是简单补充一下: 按照上面这篇博客,下载:GitHub - tracyone/program_font: fonts for programmer 然后运行&#…

CSS选中第2个table

css如何选择body下的第2个table_已解决_博问_博客园 th, td { text-align:center; } table:nth-of-type(2) td:first-child { text-align:left; }

Redis7

摘录 https://github.com/Romantic-Lei/Learning-in-practice/blob/master/Redis/ 官网地址: 英文:Redis 中文:CRUG网站 redis中文文档 安装包:https://redis.io/download/,选择redis7.0版本即可 Redis在线测试地址(不用下载也…

Qt中常见的JS类和函数(二): 全局对象

Qt专栏: http://t.csdnimg.cn/YLlEd 相关系列文章 Qt中字符串转换为JS的函数执行 Qt中常见的JS类和函数(一): 全局对象 Qt中常见的JS类和函数(二): 全局对象 目录 2.3.构造函数属性 2.3.1.Object 2.3.2.Function 2.3.3.Array 2.3.4.ArrayBuffer 2.3.5.String …

等保测评与商用密码共铸工控安全“双评合规”新篇章

最近听说了一个段子:“网络安全就像美女的内衣,等保和密评就是最贴身的内衣两件套,上下身一件都不能少。否则你的魔鬼身材(核心数据)就有可能被色狼(黑客)一览无余(数据泄漏&#xf…

linux系统消息中间件安装配置负载均衡器

负载均衡器 安装并配置负载均衡器安装并配置负载均衡器HA在其中一台服务器安装HAProxy修改 /etc/haproxy/haproxy.cfg 常见命令插件管理virtual_host管理用户管理其他使用命令:RabbitMQ 错误处理 安装并配置负载均衡器 注意:如果使用阿里云,可…

Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目

文章目录 安装安装JDK安装Maven安装GitNodeJS安装(可选)安装Jenkins 配置Jenkins为Jenkins更换插件源设置jenkins时区安装插件全局工具配置添加Gitee凭证Gitee项目配置 部署后端1.新建任务2.配置源码管理3.构建触发器4.到Gitee中添加WebHook5.构建环境6.…

详解POCV/SOCV的时序报告

​POCV/SOCV的时序报告中有如下变量: Mean: 高斯分布中的μ值(平均值) Sensit: sensitivity,也就是1个Sigma的值; Corner: Sigma边界的最差值 cell的delay Delay mean N * Delay sigma; cell 的Transition Sl…

力扣 300. 最长递增子序列

题目来源:https://leetcode.cn/problems/longest-increasing-subsequence/description/ C题解1:动态规划 用两个循环,每到一个元素,就找它之前的最长递增子序列。 dp[i]表示第i个元素的最长递增子序列,里层遍历寻找之…

【python基础学习2】python可迭代对象iterator的特点,以及相关函数:zip(), map(), join() 和strip()方法等

目录 1 python里的可迭代对象 1.1 什么是可迭代对象 1.2 python里的可迭代对象 1.3 可迭代对象如何遍历 1.3.1 可迭代方法 1.3.2 迭代器的测试 1.4 python里的可迭代对象都不是向量,加法等是合并规则 1.5 可迭代对象不支持减法操作 1.6 可迭代器可以直接用…

STM32自学☞输入捕获测频率和占空比案例

本文是通过PA0口输出PWM波,然后通过PA6口捕获PWM波的频率和占空比,最终在oled屏上显示我们自己设置的频率和占空比。由于和前面的pwm呼吸灯代码有重合部分所以本文中的代码由前者修改而来,对于文件命名不要在意。 pwm_led.c文件 /* 编写步…

RubyMine 2023:让Ruby编程变得更简单 mac/win版

JetBrains RubyMine 2023是一款专为Ruby开发者打造的强大集成开发环境(IDE)。这款工具集成了许多先进的功能,旨在提高Ruby编程的效率和生产力。 RubyMine 2023软件获取 RubyMine 2023的智能代码编辑器提供了丰富的代码补全和提示功能&#…

使用vuetify实现全局v-alert消息通知

前排提示,本文为引流文,文章内容不全,更多信息前往:oldmoon.top 查看 简介 使用强大的Vuetify开发前端页面,结果发现官方没有提供简便的全局消息通知组件(像Element中的ElMessage那样)&#xf…

机器学习之特征缩放

特征缩放(Feature Scaling)是机器学习数据预处理中的一种方法,旨在将不同量级的数据变换到相同的尺度。这一步骤对于很多机器学习算法来说非常重要,因为算法的性能可能会因为特征的量级不同而受到影响。特征缩放可以提高算法的收敛…

【web】nginx+php环境搭建-关键点(简版)

一、nginx和php常用命令 命令功能Nginxphp-fpm启动systemctl start nginxsystemctl start php-fpm停止systemctl stop nginxsystemctl stop php-fpm重启systemctl restart nginxsystemctl restart php-fpm查看启动状态systemctl status nginxsystemctl status php-fpm开机自启…