文档章节

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

字数 649
阅读 29
收藏 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
成都
程序员
再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录

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

WPwalter
01/30
0
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
0
Git+Gerrit如何永久删除历史文件(大文件/私密文件)

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

开发的猫
03/21
0
0
【转】Git详解之九 Git内部原理

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

季牧云
2012/06/15
0
0
雨后清风教你将回收站设置为在Windows10中立即永久删除文件

当用户删除文件时,它通常会移动到其回收站,以便以后可以在必要时还原文件。要从PC永久删除文件并回收文件正在使用的任何硬盘空间,您需要从回收站中删除文件。您可以从回收站中删除单个文件...

waler
08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

postgresql 使用odbc_fdw连接 sqlserver

安装配置odbc_fdw 1.安装unixODBC apt-get install unixodbc unixodbc-dev 2.安装 Microsoft ODBC Driver 17 for SQL Server curl https://packages.microsoft.com/config/ubuntu/16.04/prod......

dubox
7分钟前
0
0
学习

z-index {堆叠顺序} vertical-align: baseline;{垂直对齐图像} vertical-align: middle;{内容在中部对齐} font-weight: bold;{使用粗体} font-style: italic;{从父元素那继承字体的样式} whi...

墨冥
13分钟前
0
0
Lock和synchronized比较详解

https://www.cnblogs.com/handsomeye/p/5999362.html

qimh
19分钟前
0
0
Postman接口测试神器从安装到精通

1 摘要 Postman 是一个接口测试和 http 请求的神器,非常好用。 官方 github 地址: https://github.com/postmanlabs Postman 的优点: 支持各种的请求类型: get、post、put、patch、delete ...

HiBlock
20分钟前
0
0
c++_拷贝构造函数

拷贝构造又叫复制构造;如果没有实现拷贝构造函数,c++会自动生成一个,叫做隐式拷贝构造函数.该自动生成的隐式拷贝构造也能应付绝大部分情况. 拷贝构造函数的格式: //定义class CTest{p...

一个小妞
20分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部