Git repo-clean 一种 Git 大仓库文件清理工具

安装:

1
2
3
4
5
6
7
8
9
$ git clone https://gitee.com/oschina/git-repo-clean
# 进入源码目录,编译
$ cd git-repo-clean

# 在 bin/目录下即是编译后的程序包
$ make

# cp bin/git-repo-clean $(shell git --exec-path)
$ make install

用法:

git repo-clean [选项]

**** **** **** **** **** * 重要! * **** **** **** ****
*** 该历史重写过程是不可逆的破坏性的操作 ***
*** 请在做任何操作之前先备份您的仓库数据 ***


git repo-clean 是一款扫描 Git 仓库元数据,然后根据指定的文件类型以及大小来过滤出文件,并且从仓库中完全删除掉这些指定文件的工具,它将重写跟删除的文件相关的提交以及之后的提交的历史。

选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
-v, --verbose         显示处理的详细过程
-V, --version 显示 git-repo-clean 版本号
-h, --help 显示使用信息
-p, --path 指定Git仓库的路径, 默认是当前目录,即'.'
-s, --scan 扫描Git仓库数据,默认是扫描所有分支中的数据
-f, --file 直接指定仓库中的文件或目录,与'--scan'不兼容
-b, --branch 设置需要删除文件的分支, 默认是从所有分支中删除文件
-l, --limit 设置扫描文件阈值, 比如: '--limit=10m'
-n, --number 设置显示扫描结果的数量
-t, --type 设置扫描文件后缀名,即文件类型
-i, --interactive 开启交互式操作
-d, --delete 执行文件删除和历史重写过程
-L, --lfs 将大文件转换为Git LFS指针文件

这些选项主要可以给用户提供两种使用方法:交互式、命令行式

交互式用法:
直接执行 git repo-cleangit repo-clean -i 进入交互式界面程序与用户通过问答的方式进行交互,使得用户在处理文件筛选、备份、删除、历史重写的整个过程变得更加简单。

命令行式用法:
用户可以在命令行中通过指定各种选项的参数,来实现功能,例如:

为了只扫描仓库中文件类型为 tar.gz,且大小超过 1G 的文件,执行:
git repo-clean --scan --limit=1G --type=tar.gz

当需要删除指定文件时,需要加上 –delete 选项,执行:
git repo-clean --scan --limit=1G --type=tar.gz --delete

如果相同文件存在多个分支中,或者发现前一次删除之后,相同的文件仍然存在,则可以使用 –branch 选项,从所有分支删除,执行:
git repo-clean --scan --limit=1G --type=tar.gz --delete --branch=all

可以通过 –number 选项,控制扫描结果的数量,默认只扫描出前 3 个最大文件:
git repo-clean --scan --limit=1G --type=tar.gz --delete --number=3

  • 如果你想用 Git LFS 管理大文件,可以使用 –lfs 选项将大文件转换为 LFS 指针文件这个操作必须在扫描模式下进行,必须指定文件类型,即必须有 –scan, –type 参数此时 –number 参数无效:
    git repo-clean --scan --type=so --lfs --delete

  • 在非扫描模式下,即不指定 –scan 参数,可以快速进行以下操作:

    删除某些已知的文件,不必扫描仓库,使用 –file 选项直接指定文件:
    git repo-clean --file file1 --file file2 --delete

    或者,批量删除某个目录下所有的文件:
    git repo-clean --file dir/ --delete

    又或者,批量删除某种类型文件:
    git repo-clean --type="png" --delete

    再或者,批量删除超过某个大小的所有文件:
    git repo-clean --limit=10M --delete