如何使用BFG

时间:2016-02-01 21:35:44

标签: git blob history

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

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)...                          

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-1)

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

  

git prune

  

git gc