BFG Repo Cleaner未按预期工作

7

我正在尝试缩小一个较大的代码库(约3.4G),bfg-repo-cleaner似乎是一个完美的工具来减小它的大小。

我按照文档描述运行了该工具,但仅看到代码库大小的轻微减少。特别令人惊讶的是,一些工具已经说它们被移除了(已删除文件的deleted-files.txt),但并不是全部,这些文件仍然存在于代码库中。我真的不想开始使用git filter-branch进行操作,所以任何帮助都将不胜感激。

我故意选择了具有侵略性的--no-blob-protection选项来最大化效果。我包含了我运行的命令和截断输出。

git count-objects -vH

count: 0
size: 0 bytes
in-pack: 1616184
packs: 1
size-pack: 3.38 GiB
prune-packable: 0
garbage: 0
size-garbage: 0 bytes

du -rh -d 0

3.4G    .

该命令是使用BFG工具将大于2M的Git blob删除,以减少Git存储库的大小。您需要下载BFG工具并在终端中键入此命令来执行操作。
Scanning packfile for large blobs: 1616184
Scanning packfile for large blobs completed in 33,465 ms.
Found 242 blob ids for large blobs - biggest=497179278 smallest=2098032
Total size (unpacked)=3534794122
Found 0 objects to protect
Found 4965 tag-pointing refs : ...
Found 8519 commit-pointing refs :  ...

Protected commits
-----------------

You're not protecting any commits, which means the BFG will modify the contents of even *current* commits.

This isn't recommended - ideally, if your current commits are dirty, you should fix up your working copy and commit that, check that your build still works, and only then run the BFG to clean up your history.

Cleaning
--------

Found 110364 commits
Cleaning commits:       100% (110364/110364)
Cleaning commits completed in 345,977 ms.

Updating 13483 Refs
-------------------

Ref                                                                                                                  Before     After
----------------------------------------------------------------------------------------------------------------------------------------
...

Updating references:    100% (13483/13483)
...Ref update completed in 15,354 ms.

Commit Tree-Dirt History
------------------------

Earliest                                              Latest
|                                                          |
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

D = dirty commits (file tree fixed)
m = modified commits (commit message or parents changed)
. = clean commits (no changes to file tree)

                        Before     After
-------------------------------------------
First modified commit | 757f8383 | c11fc923
Last dirty commit     | e28d047b | 92b88b05

Deleted files
-------------
...

In total, 418853 object ids were changed. Full details are logged here:

..bfg-report/2016-04-18/10-24-49

git count-objects -vH

count: 419093
size: 1.62 GiB
in-pack: 1616184
packs: 1
size-pack: 3.38 GiB
prune-packable: 0
garbage: 0
size-garbage: 0 bytes

du -rh -d 0

5.1G    .

git reflog expire --expire=now --all && git gc --prune=now --aggressive

这段代码是用于Git技术中的命令,它可以清除无用的历史记录并压缩存储库,以节省存储空间。请注意保留代码中的HTML标签,不要修改它们。
Counting objects: 1905870, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1786570/1786570), done.
Writing objects: 100% (1905870/1905870), done.
Total 1905870 (delta 1274991), reused 482300 (delta 0)
Removing duplicate objects: 100% (256/256), done.
Checking connectivity: 1905870, done.

git count-objects -vH

count: 0
size: 0 bytes
in-pack: 1905870
packs: 1
size-pack: 3.03 GiB
prune-packable: 0
garbage: 0
size-garbage: 0 bytes

头部..bfg报告/2016-04-18/10-24-49/已删除文件.txt

8afa72875d3013620bb122916bd1ec33a066cbf2 1075353 file_name1.gpx
7656f6464c67f92c48cdbb03ec5a81067c636238 1644202 file_name2.csv
ab68fb197d4479b3b6dec6e85bd5cbaf433a87c5 773236 file_name3.ttf
86c9c0b55ff99c3789bb3ed17daf51bebacba1cb 870631 file_name4@2x.png
70c928943feab0a3a1f97b4f752e9dbc1d8f37fa 950305 file_name5@2x.png
3862d0da43f5902c75e86ff0dd925d8cca601de3 779356 file_name6@2x.png
6effce4b245961cb46e2cf3f4d05bd6c8c182760 908017 file_name7@2x.png
1866b1053dd48fc4d0677f03feb4baf2f67b567c 1353732 file_name8.gif
f0d984f00678504fe073110bb6553049e9678755 1350785 file_name9.gif
af877d286b12b9f79560a938375abe04a15ff405 3214192 file_name10.gif

git cat-file -s 8afa72875d3013620bb122916bd1ec33a066cbf2

该命令用于显示对象的大小,其中“8afa72875d3013620bb122916bd1ec33a066cbf2”是对象的SHA-1哈希值。
1075353

你正在查看的 deleted-files.txt 文件似乎与 BFG 输出指定的路径不同。也许你是在查看几天前 BFG 的先前运行日志? - kini
是的,你说得对,但同样的问题也出现在今天(2016年4月18日)运行的BFG中。 - Zachary Cicala
2个回答

4
我找到了问题所在。我们有很多仍然指向含有大型blob的树的旧分支。删除这些分支并重新运行bfg使我减少了数千兆字节。

我曾认为--no-blob-protection标志会解决这个问题。


2
既然你已经找到了解决问题的方法,你应该考虑将自己的答案标记为“已接受”,以表明问题已经得到解决。 - Bryce Drew
我确认这是解决方案。它拯救了我的代码库,谢谢! - JGL

1
我发现使用相同的命令参数多次重新运行bfg会发现更多需要清理的提交。最终它会显示:
BFG aborting: No refs to update - no dirty commits found??

此时,reflog expiregc会减小打包大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接