git清理历史记录中的大文件

查看哪些历史提交过文件占用空间较大

使用以下命令可以查看占用空间最多的五个文件:

rev-list命令用来列出Git仓库中的提交,我们用它来列出所有提交中涉及的文件名及其ID。 该命令可以指定只显示某个引用(或分支)的上下游的提交。

--objects:列出该提交涉及的所有文件ID。

--all:所有分支的提交,相当于指定了位于/refs下的所有引用。

verify-pack命令用于显示已打包的内容。

重写commit,删除大文件

使用以下命令,删除历史提交过的大文件:

上面脚本中的 big-file.jar 请换成你第一步查出的大文件名,或者这里直接写一个目录(也支持目录删除)。

filter-branch命令可以用来重写Git仓库中的提交

--index-filter参数用来指定一条Bash命令,然后Git会检出(checkout)所有的提交, 执行该命令,然后重新提交。

–all参数表示我们需要重写所有分支(或引用)。

在重写提交的过程中,会有以下日志输出:

如果显示 xxxxx unchanged, 说明repo里没有找到该文件, 请检查路径和文件名是否正确,重复上面的脚本,把所有你想删除的文件都删掉。

推送修改后的repo

以强制覆盖的方式推送你的repo, 命令如下:

git push origin master --force

清理和回收空间

虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间,命令如下:

至此,我们已经彻底的删除了我们不想要的文件。

 

 

 

 

 

参考链接:

http://www.hollischuang.com/archives/1708

 

 

 

 

Leave a Reply

Your email address will not be published.