如何从 git 存储库中删除死文件/大文件,同时保留特定分支并维护替换引用?

问题描述 投票:0回答:1

我有一个大的(~2GB)、旧的(15 年以上)git 存储库(这些年来已经从 CVS 转换为 SVN 再到 git)。我们正在将托管从本地更改为云,因此我想花时间清理存储库。我想删除不再属于历史记录的旧文件,以减少整体克隆大小/时间。

有数百个分支我不再关心了。我真的只对保留几个(~10)个分支感兴趣。

我尝试使用 --strip-blobs-bigger-than 1M --protect-blobs-from <my refs> 使用

BFG 存储库清理器
。它似乎非常符合我的用例。我不想删除当前存在于所选分支的 HEAD 中的任何文件,无论其大小如何。但是,除了生成映射文件之外,它不能很好地处理更改的提交哈希值。

我还尝试过使用 --strip-blobs-bigger-than 1M

git filter-repo
。这使用了替换引用,以便我可以通过旧的提交哈希进行引用,这非常重要。但是,它通过删除我不想删除的文件来破坏我当前分支中的内容。

看起来

git filter-repo
是我应该使用的工具,但是,我不想手动列出我想要删除的所有文件(或者相反,我想要保留的文件)。有更好的方法吗?

git bfg-repo-cleaner git-filter-repo
1个回答
0
投票

我最终使用了bfg-ish,它是基于 git-filter-repo 的 BFG Repo 清理器的重新实现。

它提供了我想要的 BFG Repo Cleaner 的 API,具有 git-filter-repo 的功能

我所要做的就是跑

$ git clone <my repo url> myrepo
$ git lfs fetch --all
$ cd myrepo
$ bfg-ish -p branch1 branch2 branch3 branch4 --strip-blobs-bigger-than 1M .

其中branchN是我实际想要保留的分支的名称。

此存储库还使用了 git-lfs,因此在弄乱所有引用之前拉出“所有”LFS 对象非常重要。然后我将生成的存储库推送到我的新位置。

© www.soinside.com 2019 - 2024. All rights reserved.