我如何使用 BFG 清理 HEAD 中当前不存在的所有 git 历史记录和文件 blob

How do I clean all git history and blobs of files not currently present in HEAD with BFG

我想清除以前删除的所有 blob 和文件历史记录(即不再存在于 HEAD 中),我目前正在 运行 这些命令,但 BFG 似乎删除了所有 blob,包括那些存在的在头部:

git log  # Returns 1050 commits
git commit -a -m "Clean the old history and blobs with BFG"
java -jar bfg.jar --delete-files '*'  # Delete all files not in HEAD
git log  # Still returns 1050 commits, all empty
git diff 5458b2^ 5458b2  # Returns 0 change, while it concerns a protected file

BFG 实际上考虑到了 HEAD 中受保护的文件,例如 gitignore:

Protected commits
-----------------
These are your protected commits, and so their contents will NOT be altered:
 * commit 22a1ebd3 (protected by 'HEAD') - contains 1451 dirty files : 
    - .gitignore (813 B)
    - ...

但无论如何它们都被删除了,而它们应该受到保护:

Deleted files
-------------
    Filename     Git id  
    ----------------------------------------
    .gitignore | 091217cf (672 B), 17e3d7c5 (227 B)...                          

也许您可以尝试使用以下命令来删除所有无法访问的对象。

git prune

git gc

我终于使用 that script 来清理存储库中已删除的过时文件。它结合了分支重写和垃圾收集器调用的几个步骤来清理当前存储库。

我设法在 4MB 的新存储库中压缩了 700MB 的重存储库。 像往常一样,在 运行 这种脚本之前复制你的存储库,它可能会导致一些数据丢失!