正确使用BFG Repo Cleaner

时间:2018-03-30 19:56:01

标签: git tfs bfg-repo-cleaner

BFG Repo Cleaner站点提供了使用该工具清理存储库的示例:

  1. 克隆您的回购的新副本。

    $ git clone --mirror git://example.com/some-big-repo.git
    
  2. 运行BFG以清理您的仓库。

    $ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
    
  3. 使用git gc去除不需要的脏数据

    $ cd some-big-repo.git
    $ git reflog expire --expire=now --all && git gc --prune=now --aggressive
    
  4. 将更改推回到远程

    $git push
    
  5. 我理解头部分支是受保护的,因此头部分支中大于100M的任何文件仍然存在。如果我按照描述运行此工具,我将失去所述100M文件的任何历史记录正确吗?因此,如果在旧提交中存在该文件的旧版本,它就会消失,我将无法在之前的状态中使用它....正确吗?

    另外,我有一位同事说明了以下内容,我想知道是否属实:

    如果您回到在TFS中镜像的存储库,则对包文件的更改将不会反映在远程和将来的克隆上

    您必须在TFS中创建一个新的存储库并在那里推送镜像,以便远程选择包文件更改。

2 个答案:

答案 0 :(得分:1)

将保留存在于仓库HEAD中的任何文件,包括历史记录。它可以保护您免于犯错误。这个想法是你应该明确删除文件,提交删除,然后清理历史记录以删除它。

TFS没有-I = 10它的回购;你的同事是对的。请参阅Team Foundation Server 2015 (tfs2015) run git gc --prune=now on orgin/remote进行确认。

答案 1 :(得分:1)

我很快就使用了BFG Repo Cleaner从TFS的git repo中删除了一些文件夹。

如果您还要修改头部,请使用参数--no-blob-protection

显然,在清理过的(旧)提交中,您清理的文件丢失了。提交仍然存在,但每个相应的提交中都缺少该文件。您将无法看到文件历史记录。

出于安全考虑,我总是重命名旧的仓库并创建一个新的仓库。可能甚至还有另一个回购名称,以便我的同事不能将错误的回购合并到他们的工作副本中。

如果你真的想要,可以git push --all -force并重写TFS回购的完整历史记录。但随后旧的历史消失了。