文档章节

从git中永久删除文件以节省空间

字数 649
阅读 15
收藏 0
点赞 0
评论 0

在使用版本管理工具的过程中我们会碰到这样的问题:不小心把一个不该加入版本管理的文件加进去了,有时候这个文件很大,也许我们整个版本库才几百 K,但加进去这个没用的文件却有好几百M,我可不想因为这么个破烂东西把整个版本库整个硕大无比,以后维护备份都不方便;还有时候是不小心把一个敏感文件 加进去了,比如里面写了信用卡密码的文本文件。

这时候我们希望能把它从版本库中永久删除不留痕迹,不仅要让它在版本历史里看不出来,还要把它占用的空间也释放出来。

在svn中的办法是把整个版本库dump出来filter一下再load回去。Git中可以用下面的方法来实现:

我们先创建一个试验用的版本库,并往里面提交一个10M的大文件再删除:

$ mkdir t
$ cd t
$ git init
Initialized empty Git repository in
 /Users/apple/t/.git/
$ dd if=/dev/urandom of=testme.txt bs=10240 count=1024
1024+0 records in
1024+0 records out
10485760 bytes transferred in 1.684808 secs (6223712 bytes/sec)
$ git add testme.txt
$ git commit -m "a"
[master (root-commit)]: created 6fbb432: "a"
 1 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 testme.txt
$ git rm testme.txt
rm 'testme.txt'
$ git commit -m r
[master]: created bb38396: "r"
 1 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 testme.txt

这时候我们看看版本库的大小:

$ du -hs
 10M    .

很明显虽然testme.txt已经被删除了,但是因为版本历史里曾经有过这个文件,所以git仍然把它存在库中,以后可以通过它再把它恢复回来。 但我实在是不希望这么一个空版本库占用我10M宝贵的硬盘空间,所以我要把它全删掉,这就要用到git的filter-branch命令了。具体这个命令的用法可以看文档,下面是这个例子中的用法:

$ git filter-branch --tree-filter 'rm -f testme.txt' HEAD
Rewrite bb383961a2d13e12d92be5f5e5d37491a90dee66 (2/2)
Ref 'refs/heads/master'
 was rewritten
$ git ls-remote .
230b8d53e2a6d5669165eed55579b64dccd78d11        HEAD
230b8d53e2a6d5669165eed55579b64dccd78d11        refs/heads/master
bb383961a2d13e12d92be5f5e5d37491a90dee66        refs/original/refs/heads/master
$ git update-ref -d refs/original/refs/heads/master [bb383961a2d13e12d92be5f5e5d37491a90dee66]
$ git ls-remote .
230b8d53e2a6d5669165eed55579b64dccd78d11        HEAD
230b8d53e2a6d5669165eed55579b64dccd78d11        refs/heads/master
$ rm -rf .git/logs
$ git reflog --all
$ git prune
$ git gc
$ du -hs
 84K    .

OK,这个文件已经完完全全删掉了,版本库已经不再占用空间了。

© 著作权归作者所有

共有 人打赏支持
妈妈说名字长长长能引来美女123
粉丝 2
博文 9
码字总数 5653
作品 0
成都
程序员
[UMU WSH 教程](43) WIA 应用实例 - 批量转换图片格式

UMU WSH 教程 FSO 应用实例 - 批量删除文件 UMU WSH 教程代码下载:http://sdrv.ms/ZpPPaS UMU WSH Git:http://git.oschina.net/umu618/umu-wsh   bmp 格式的图片占空间比较大,转为无损压...

UMU ⋅ 2012/10/14 ⋅ 0

再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录

我在 分支开发得多些,但总时不时被高优先级的 BUG 打断需要临时去 分一个分支出来解 BUG。git 2.6 以上开始提供了 worktree 功能,可以解决这样的问题。 阅读本文将了解使用 git worktree 高...

WPwalter ⋅ 01/30 ⋅ 0

Git+Gerrit如何永久删除历史文件(大文件/私密文件)

一、前言 前几天同事在拉取一个项目的Git仓库时,发现项目拉取速度非常慢,半个钟都无法拉取下来,并且发现一直卡在了99%的进度上。 开始时以为是Git网络出问题了,检查了其它仓库却都可以正...

开发的猫 ⋅ 03/21 ⋅ 0

【转】Git详解之九 Git内部原理

Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式。我个人发现学习这些内容对于理解 Git 的用处和强大是非常...

季牧云 ⋅ 2012/06/15 ⋅ 0

改写历史,永久删除git库的物理文件

发布在 github 上的项目 jfinal 最初没有使用maven进行管理,所以 WEB-INF/lib 留存有 jar 文件,使用 maven进行库文件管理以后这些 jar 不再有用,故删之。 但即便是删掉,库中还是会存有这...

JFinal ⋅ 2014/04/02 ⋅ 6

Git详解之九:Git内部原理

Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式。我个人发现学习这些内容对于理解 Git 的用处和强大是非常...

小代码2016 ⋅ 2016/04/05 ⋅ 0

Git详解之九 Git内部原理

Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式。我个人发现学习这些内容对于理解 Git 的用处和强大是非常...

小米米儿小 ⋅ 2013/08/08 ⋅ 0

2017.11.28-学习笔记:简单的git命令

版本控制系统(version control system) git 分布式版本控制系统 1.git的三个区 1.工作区:我们书写代码的地方,工作的目录就叫做工作区 2.暂存区:使用 add 命令,在 .git 目录中的一个索引文...

演员小新 ⋅ 2017/11/28 ⋅ 0

(转)Mac 下清理硬盘空间大小 很实用哦

原文地址:https://blog.csdn.net/nynkl/article/details/78050495 硬盘空间是大家最头痛的一个问题,大家在硬盘空间变小的时候怎么腾空间的呢?下面绿茶小编为大家分享7个mac系统释放空间的...

小曼Study ⋅ 05/30 ⋅ 0

如何使用git.oschina.net

0 准备工作 - 在官网下载git安装包 我们在Windows下安装之后,开始菜单会出现Git Bash和Git GUI,这里我们只用Bash命令行。 因为相比与GUI,使用Git Bash命令行模式的流程和在Linux下使用git...

realsa ⋅ 2014/09/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL主从复制原理、半同步操作步骤及原理

1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1、scp/sftp/nc 命令可以实现远程数据同步。 2、搭建ftp/http/svn/nfs 服务器,然后在客户端上也可以把数据同步到服务器。...

xiaomin0322 ⋅ 19分钟前 ⋅ 0

Oracle10g 数据及文件迁移过程[原]

QL*Plus: Release 10.2.0.1.0 - Production on 星期三 5月 11 10:22:35 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接到: Oracle Database 10g Enterprise Edition Re......

harrypotter ⋅ 25分钟前 ⋅ 0

nginx安装

1:安装工具包 wget、vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc gcc-c++ 2:下载nginx安装包 wget http://nginx.org/download/nginx-1......

壹丶贰 ⋅ 28分钟前 ⋅ 0

ideaVim安装及配置

1.安装插件 File-Settings-Plugins,Browse Repositories,输入ideavim,安装。 重启后,在Tools-Vim Emulator启用。 2.快捷键设置 ideaViim键与idea快捷键有冲突,可以在Settings-Other Se...

Funcy1122 ⋅ 32分钟前 ⋅ 0

MySQL中B+Tree索引原理

B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B...

浮躁的码农 ⋅ 47分钟前 ⋅ 0

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 51分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 今天 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 今天 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 今天 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部