目录

  Case1:代码库中存大文件

  

Case1:代码库中存大文件

背景

  有这种情况,项目运行需要依赖一个文件(比如需要读一个文件中的数据),那么最直接的方式就是将该文件添加到代码中的分支中,然后将分支代码(包含大文件)提交到远程版本库中,那么在运行项目的时候,就可以直接读项目中的文件了。

分析

  上面的操作,其实是不推荐的,一般是禁止的。

  首先,大文件保存到分支中,git add、commit需要很长时间,同时还需要将代码提交到远程代码库,这就意味着,大文件需要通过网络传输到远程,这个过程也是很耗时的。

  另外,如果将该代码合入到master后,其他人拉取分支的时候,也会将该大文件拉取到别人的本地代码库中,无论是别人pull还是clone,拉取过程都会很耗时,因为都会把大文件pull下来。

  还有,大文件上传到远端后,在拉取的代码时候,因为文件内容过大,所以会造成远程仓库的负载升高,甚至造成仓库服务不可用,之前在公司碰到过因为有两个用户同时从远程仓库拉取几个G的代码(可能是大文件、也可能是代码量的确很大),导致整个公司的RD都无法访问远程仓库。不要认为机器有很大带宽就没事,公司内网的速度可是超过10M每秒的。

  最后,如果是对于需要编译打包的文件来说,包含大文件,在打包编译过程中会及其耗时;在打包之前,可能有一些健康检查、静态检查...都会因为代码数据量大而增大检查时间。

  所以,不要向代码库中保存大文件。

方案

  可以考虑将文件保存在代码以外的地方(比如专门做文件存储的平台),而代码中只需要使用引用文件的地址(URI)即可,在需要的时候下载即可。

其他

  如果已经将大文件保存到分支代码中了,只要没有将代码提交到远程就没事。

  如果已经将大文件提交到远程分支(已经push到远程了),可以尝试将远程的分支删除。

  如果包含大文件的分支已经合入master,可以进行回退,然后强制push进行刷新

Git采坑与问题排查的更多相关文章

  1. v8环境搭建采坑记录

    项目组有把js接入C++服务求的需求,故开始了v8接入的工作,用了一天多时间,v8才在centos环境上成功安装,过程中踩了很多坑,下面将采坑过程记录如下: centos下编译安装v8:   查看ce ...

  2. 实现万行级excel导出---poi--ooxm的应用和采坑

    xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! - ...

  3. 聊聊.netcore采坑那一些事之系统时间and文件路径

    聊聊.netcore采坑那一些事之系统时间and文件路径 Hi,小伙伴大家好,最近工作比较忙,很久没有和大家分享点东西了.这个周末都加了两天班.公司的新项目都是采用.netcore来开发,在开发过程中 ...

  4. java采坑之路

    判断相等 字符串判断相等         String str1 = null;         String str2 = "java金融";        // str1.eq ...

  5. Redis集群搭建采坑总结

    背景 先澄清一下,整个过程问题都不是我解决的,我在里面就是起了个打酱油的角色.因为实际上我负责这个项目,整个过程也比较清楚.之前也跟具体负责的同事说过,等过段时间带他做做项目复盘.结果一直忙,之前做的 ...

  6. Cloudera Manager 5.9 和 CDH 5.9 离线安装指南及个人采坑填坑记

    公司的CDH早就装好了,一直想自己装一个玩玩,最近组了台电脑,笔记本就淘汰下来了,加上之前的,一共3台,就在X宝上买了CPU和内存升级了下笔记本,就自己组了个集群. 话说,好想去捡垃圾,捡台8核16线 ...

  7. angular采坑记录

    在angular中会遇到一些莫名的问题,导致不能完成想要的功能,可能是某项用法使用错误,或许是angular相对应不支持,或者是我们功力根本就没有达到.为了在每次采坑之后能有所收获,再遇到时能理解其根 ...

  8. 分布式改造剧集之Redis缓存采坑记

    Redis缓存采坑记 ​ 前言 ​ 这个其实应该属于分布式改造剧集中的一集(第一集见前面博客:http://www.cnblogs.com/Kidezyq/p/8748961.html),本来按照顺序 ...

  9. 采坑:python base64

    需求:  读取文本内容,对字符串进行base64加密 >>> str = 'aaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbb\nccc ...

随机推荐

  1. Linux指令(压缩和解压类)

    gzip/gunzip 指令 gzip用于压缩文件,gunzip用于解压基本语法: gzip文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件) gunzip文件.gz (功能描述:解压缩文件命 ...

  2. likely和unlikely是如何对代码的优化?

             在执行if判断时,可以使用GCC提供了__builtin_expect对代码进行优化,可以提高代码的运行速度,参考GCC手册的"3.10 Options That Cont ...

  3. docker中使用阿里云的apt源安装各种实用工具

    今天想在docker中安装vim工具,还有其他的软件等等,如果你直接执行apt-get install vim是没有用的,会显示: root@7d43d83fd3a8:/etc/nginx# apt- ...

  4. PAT 乙级 1020.月饼 C++/Java

    题目来源 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部 ...

  5. django云端留言板

    1.创建应用 django-admin startproject cloudms cd cloudms python manage.py startapp msgapp 2.创建模板文件 在cloud ...

  6. spring-boot子模块打包的jar中去掉BOOT-INF文件夹

    1.spring-boot maven打包,一般pom.xml文件里会加 <plugin> <groupId>org.springframework.boot</grou ...

  7. Spring Cloud Consul Config 知识点

    Spring Cloud Consul Config 是 Config Server 和 Client的替代方案. 搭建一个配置中心,可以选择的方案: Spring Cloud Config 或者 S ...

  8. Spring Cloud 之 Consul 知识点:服务注册与发现(类似工具:Eureka、ZooKeeper、Etcd)

    资料 网址 springcloud(十三):注册中心 Consul 使用详解 http://ityouknow.com/springcloud/2018/07/20/spring-cloud-cons ...

  9. 17、Python面向对象高级

    一.isinstance和issubclass type():不会认为子类实例是一种父类类型: isinstance():认为子类实例是一种父类类型. issubclass():判断是否为其子类. c ...

  10. 函数中,对形参做不加var的全局溢出赋值,可改变形参所指向的实参的本身值

    var formateNumArr = function(arr,defaultVal){     var a = [];     $.each(arr,function(i,v){          ...