BFG Repo Cleaner的正确使用方法

3

BFG Repo Cleaner 网站提供了一个使用该工具清理仓库的示例:

  1. Clone a fresh copy of your repo.

    $ git clone --mirror git://example.com/some-big-repo.git
    
  2. Run BFG to clean up your repo.

    $ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
    
  3. Use git gc to strip out the unwanted dirty data

    $ cd some-big-repo.git
    $ git reflog expire --expire=now --all && git gc --prune=now --aggressive
    
  4. Push changes back up to the remote

    $git push
    
我知道主分支是受保护的,因此任何大于100M的文件仍将存在于主分支中。如果我按照描述运行此工具,那么我将失去该100M文件的所有历史记录,对吗?因此,如果旧提交中有该文件的旧版本,那么它已经不复存在,我将无法使用它以前的状态...对吗?
此外,我的一位同事说过以下内容,我想知道是否正确:
如果您将更改推回TFS中镜像的存储库,则远程服务器和未来的克隆不会反映出pack文件的更改。
您必须在TFS中创建一个新的存储库,并将镜像推送到那里,以便远程服务器可以捕获pack文件的更改。
2个回答

5

在这种情况下,TFS仓库应该被删除并创建一个新的吗? - Bill Greer
我假设我仍然需要执行原始帖子中的第三步。正确吗? - Bill Greer

1

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

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

显然,在清理后(旧)提交中,您清理的文件将会丢失。提交仍然存在,但是每个相应提交中的文件都已经丢失。您将无法查看文件历史记录。

出于安全原因,我建议始终重命名旧repo并创建一个新的repo。可能甚至需要使用另一个repo名称,以免我的同事将错误的repo合并到他们的工作副本中。

如果您真的想这样做,可以使用git push --all -force并重新编写TFS repo的完整历史记录。但是,旧的历史记录将会消失。


我可能错了,但我认为强制推送不能处理远程仓库中挂起的“死”引用的情况,但我认为指定 --mirror 可以。 - Daniel Mann
根据 https://git-scm.com/docs/git-push 的说明,“通常,该命令会拒绝更新不是用于覆盖它的本地引用的祖先的远程引用[..]此标志禁用这些检查,可能导致远程存储库丢失提交”。如果所有提交(包括第一个提交)都已被重写,我不确定它是否有效,但除此之外应该可以。就像重新基于一个有很多提交的旧分支一样。 - milbrandt

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