清除 gitlab 仓库中的 'hiiden' 个大文件
Clear 'hiiden' large files in gitlab repo
我知道我备份到 gitlab
的文件是 python
脚本文件和 jupyter
笔记本。但是,我的 gitlab 存储库说我目前正在使用 9.8GB(令人震惊!)。
我真的不打算将大文件提交到 repo
(例如数据文件)。目视检查没有显示那些大文件,所以我可以删除它们。我只看到 python 个脚本文件。
如何清除我的 repo
那些大文件?
大文件提交历史记录在 gitlab 中仍然可用,即使您删除了那些 'large files'。您可以使用 this 答案中的以下脚本查看这些文件列表。
git rev-list --objects --all |
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' |
sed -n 's/^blob //p' |
sort --numeric-sort --key=2 |
cut -c 1-12,41- |
$(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest
首先创建一个脚本文件,赋予文件可执行权限为:
vim history.sh # and paste the above script into the file
chmod +x history.ch # give file exe permission
./history.sh # to run file
这将报告所有提交历史和文件大小,如下所示:
....
192e100aaf93 2.8MiB SMF/Checking/models/Model_0.h5
1b808a1a25ba 2.8MiB SMF/Checking/models/Model_2.h5
80168dc7ffb54 1.3GiB SMF/data/segments_instances_final.csv
775b60418498 1.5GiB Revised_KerasData_NoSmoothing.pickle
2341792d8c9b 4.2GiB geolife.sql
......
删除大文件
使用 BFG-repo-cleaner 清理那些文件:
注意: 假设您已经安装了 java,请下载上述 repo 的 bfg.jar 文件并将其复制到您的当前目录。
- 克隆您的 git 存储库(并对其进行备份):
$ git clone --mirror git://example.com/my-large-repo.git
- 运行 清理存储库的 BFG(例如清理大于 50MB 的文件):
$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-large-repo.git
....
Before After
-------------------------------------------
First modified commit | fc7cf2f9 | a772ae4a
Last dirty commit | d4a1a3d4 | 9b345832
Deleted files
-------------
Filename Git id
-------------------------------------------------------------------------------------------------------------------------
3Class_Instances.pkl | ceebb395 (558.1 MB)
Beijing_KerasData.pkl | 8681a270 (133.4 MB)
Filtered_Trajectory.pkl | bfe06d09 (137.8 MB)
....
- 去掉不需要的脏数据
$ cd my-large-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
Enumerating objects: 1306, done.
Counting objects: 100% (1306/1306), done.
Delta compression using up to 8 threads
Compressing objects: 78% (973/1238)238)
...
- 终于推回你的 clean repo:
$ git push
来源:here
我知道我备份到 gitlab
的文件是 python
脚本文件和 jupyter
笔记本。但是,我的 gitlab 存储库说我目前正在使用 9.8GB(令人震惊!)。
我真的不打算将大文件提交到 repo
(例如数据文件)。目视检查没有显示那些大文件,所以我可以删除它们。我只看到 python 个脚本文件。
如何清除我的 repo
那些大文件?
大文件提交历史记录在 gitlab 中仍然可用,即使您删除了那些 'large files'。您可以使用 this 答案中的以下脚本查看这些文件列表。
git rev-list --objects --all |
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' |
sed -n 's/^blob //p' |
sort --numeric-sort --key=2 |
cut -c 1-12,41- |
$(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest
首先创建一个脚本文件,赋予文件可执行权限为:
vim history.sh # and paste the above script into the file
chmod +x history.ch # give file exe permission
./history.sh # to run file
这将报告所有提交历史和文件大小,如下所示:
....
192e100aaf93 2.8MiB SMF/Checking/models/Model_0.h5
1b808a1a25ba 2.8MiB SMF/Checking/models/Model_2.h5
80168dc7ffb54 1.3GiB SMF/data/segments_instances_final.csv
775b60418498 1.5GiB Revised_KerasData_NoSmoothing.pickle
2341792d8c9b 4.2GiB geolife.sql
......
删除大文件
使用 BFG-repo-cleaner 清理那些文件:
注意: 假设您已经安装了 java,请下载上述 repo 的 bfg.jar 文件并将其复制到您的当前目录。
- 克隆您的 git 存储库(并对其进行备份):
$ git clone --mirror git://example.com/my-large-repo.git
- 运行 清理存储库的 BFG(例如清理大于 50MB 的文件):
$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-large-repo.git
....
Before After
-------------------------------------------
First modified commit | fc7cf2f9 | a772ae4a
Last dirty commit | d4a1a3d4 | 9b345832
Deleted files
-------------
Filename Git id
-------------------------------------------------------------------------------------------------------------------------
3Class_Instances.pkl | ceebb395 (558.1 MB)
Beijing_KerasData.pkl | 8681a270 (133.4 MB)
Filtered_Trajectory.pkl | bfe06d09 (137.8 MB)
....
- 去掉不需要的脏数据
$ cd my-large-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
Enumerating objects: 1306, done.
Counting objects: 100% (1306/1306), done.
Delta compression using up to 8 threads
Compressing objects: 78% (973/1238)238)
...
- 终于推回你的 clean repo:
$ git push
来源:here