BFG Repo Cleaner站点提供了使用该工具清理存储库的示例:
克隆您的回购的新副本。
$ git clone --mirror git://example.com/some-big-repo.git
运行BFG以清理您的仓库。
$ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
使用git gc去除不需要的脏数据
$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
将更改推回到远程
$git push
我理解头部分支是受保护的,因此头部分支中大于100M的任何文件仍然存在。如果我按照描述运行此工具,我将失去所述100M文件的任何历史记录正确吗?因此,如果在旧提交中存在该文件的旧版本,它就会消失,我将无法在之前的状态中使用它....正确吗?
另外,我有一位同事说明了以下内容,我想知道是否属实:
如果您回到在TFS中镜像的存储库,则对包文件的更改将不会反映在远程和将来的克隆上
您必须在TFS中创建一个新的存储库并在那里推送镜像,以便远程选择包文件更改。
答案 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回购的完整历史记录。但随后旧的历史消失了。