彻底删除git中的较大文件(包括历史提交记录)

2019年04月15日 15:47:31 HappyRocking 阅读数 395更多

分类专栏: linux

版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/HappyRocking/article/details/89313501

场景

适用于从一个git项目中,将体积较大的资源彻底从git中删除,包括历史提交记录。

如果仅仅在目录中删除一个文件是不够的,只要在提交记录中有这个文件,那么 .git 中就会有这个文件的信息。

用 filter-branch 可以强制修改提交信息,将某个文件的历史提交痕迹也抹去,就像从来没有过这个文件一样。

做法

0、确保本地仓库是最新版本。

1、在项目根目录下运行

git rev-list --all | xargs -rL1 git ls-tree -r --long | sort -uk3 | sort -rnk4 | head -10

列出所有仓库中的对象(包括SHA值、大小、路径等),并按照大小降序排列,列出TOP 10。

$ git rev-list --all | xargs -rL1 git ls-tree -r --long | sort -uk3 | sort -rnk4 | head -10
100644 blob 71ac1de8ee83566cca68f69d54acd82b9abf607d 7701044    "attr_matching/\346\240\207\346\263\250\346\226\207\344\273\266Win\346\216\222\345\272\2171-54000.xlsx"
100644 blob d610f01bc315becaaa1c6d04772689d80ad4d010 7532106    "attr_matching/\346\240\207\346\263\250\346\226\207\344\273\266Win\346\216\222\345\272\2171-58000.xlsx"
100644 blob 72b8fd2eeb1c951a7f680e6f4031fa57d643ebe1 5717635    personal_label_project/personal_label_ocr/result/matrix.csv
100644 blob 89363c480afb229b5df4e2f6a6a951fdebca5ce2 5501428    cloth_attribute_classification/nohup_1103.out
100644 blob 7cdba6a4e584a49dcab693111a90f2bdb0030a3c 5392316    sheos_category_classification/nohup_gpu_category_33_0.out
100644 blob 84149a46904f87495df4896698ca5dd6fb53bdf3 5226094    cloth_attribute_classification/nohup_1105.out
100644 blob c77db27ae9fbb5450586daa3c9622766d7a4a9bc 5151535    attr_matching/OCR_result_correct.txt
100644 blob 58e4647427c443a44fbc66d584f6bda21b7c9036 2785190    image_check/out_tmp/nohup_5w_test_sheos.out
100644 blob 58e4647427c443a44fbc66d584f6bda21b7c9036 2785190    image_check/out_tmp/nohup_50000_sheos.out
100644 blob 58e4647427c443a44fbc66d584f6bda21b7c9036 2785190    image_check/nohup_5w.out

2、根据最大文件的路径 {filepath},修改此文件的commit历史:

git filter-branch --tree-filter "rm -f {filepath}" -- --all

3、强制提交到远程分支:

git push -f --all

4、完成。可以重新下载项目,列出所有仓库中的对象,看是否还存在刚刚删除的文件。

原文地址:https://www.cnblogs.com/dousnl/p/11428285.html

时间: 2024-11-08 21:29:03

彻底删除git中的较大文件(包括历史提交记录)的相关文章

删除git中无用的大文件

推荐阅读:为什么你的 Git 仓库变得如此臃肿 有时候我们不小心提交了一些大文件上去,后来删除了,但是已经于事无补了,整个git的提及已经蹭蹭上去了. 这个时候怎么办呢? 1. git filter-branch git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 文件名' --prune-empty --tag-name-filter cat -- --all git filter-branch

碰到诡异问题,求助大能解答,关于表单提交大文件无限数据提交问题

服务器环境 php环境 出现情况:上传30M文件的时候 本地数据一直在提交,观察服务器io 也一直有下载流量.但是就没有个结束,php输出 $_FILES,也不会执行到这行代码,比如我提交30M文件表单提交,但是流量估计超过好几百M也不会停止,反正不人为停止脚步,就是不断在数据交互.请问有大哥碰到这情况吗?是否哪些php配置没配置对 大文件上传问题已解决 以我测试上传32M文件大小为例 php 运行方式 FPM-FCGI php.ini upload_max_filesize = 64M//上传

git查看历史提交记录

#git查看历史提交记录 `git log --pretty=oneline filename`

git无法上传大文件

环境先描述一下,公司办公网自己在centos上搭建了gitlab,同时办公网的域名是从ST环境通过nginx解析过来的,这样一样就是文件经过两个nginx,按照网上的文章修改了两个nginx配置文件里的client_max_body_size,同时修改了git的配置postBuffer,依旧 无法上传大文件. 最终解决方案,修改了传输协议通过ssh协议上传.通过ssh协议首先是秘钥对的生成,相关生成方式,ssh-keygen -t rsa 一路回车生成.将生成的公钥配置到gitlab相关项目上

centos中查找出大文件命令汇总

在linux中简单的查找文件与目录大小很简单 #已易读的格式显示指定目录或文件的大小,-s选项指定对于目录不详细显示每个子目录或文件的大小 du -sh [dirname|filename] 如: 当前目录的大小: 代码如下 复制代码 du -sh . 当前目录下个文件或目录的大小: 代码如下 复制代码 du -sh * 显示前10个占用空间最大的文件或目录: 代码如下 复制代码 du -s * | sort -nr | head * -h已易读的格式显示指定目录或文件的大小 * -s选项指定对

删除git中缓存的用户名和密码

我们使用Git命令去clone Gitlab仓库的代码时,第一次弹框提示输入账号密码的时候输错了,然后后面就一直拒绝,不再重复提示输入账号密码,怎么破? git报错信息 运行一下命令缓存输入的用户名和密码: git config --global credential.helper wincred 清除掉缓存在git中的用户名和密码 git credential-manager uninstall 完美解决! 原文地址:https://www.cnblogs.com/mengtaoadmin/p

怎样从本地删除git远程仓库里面的文件

https://jingyan.baidu.com/article/2a1383288e2ba5074a134fb5.html git是大家通用的一种版本控制系统,便捷高效,各种命令需要牢记,今天小渔介绍给大家的是git的删除命令,即将文件从远程仓库中删除的操作. 方法/步骤 1 首先,我们打开自己的本地GIT仓库,在根目录下右击鼠标,选择git bash选项. 2 进入到我们的git命令行页面后,先将远程代码pull到本地,保持本地仓库跟远端仓库同步. 3 然后我们使用git rm命令删掉要删

IOS 删除git中的submodules 以sourceTree为例

1.首先删除submodule的条目  选中要删除的子目录 右键删除,删除之后, 该子模块消失. 然后查看 .gitmodules 发现删除了里面的 [submodule "IphoneApp/submodules/ProjectName"] path = IphoneApp/submodules/ProjectName url = [email protected]:dizhi/ProjectName.git 同时 项目中的  例如 IphoneApp/submodules/Proj

如何删除xcode 中过期的描述性文件

1.使用终端 首先 打开终端 cd ~/Library/MobileDevice/Provisioning\ Profiles/再删除所有 rm *.mobileprovision 2.直接找到文件夹-简单粗暴 首先show in finder,接着 Com+Shi+G ,再 ~/Library/MobileDevice/Provisioning Profiles 最后找到对应的删除