【发布时间】:2020-03-20 12:55:06
【问题描述】:
我已经阅读了多个建议使用 filter-branch 或 BFG 来完成此任务的答案,但我觉得我需要进一步的建议,因为我的情况有点特殊。
我必须管理两个存储库,一个基本上是另一个的克隆,理想情况下,我希望每天将更改从源提取到克隆中。但是,原始存储库在其历史记录中包含非常大的文件,超出了 Github 的大小限制。所以我必须删除这些文件,但与此同时,除了对这些特定文件的更改之外,我不想损害现有的提交历史记录。据我了解,BFG 对历史记录进行了完全重写,这会让 Github 误以为所有现有文件都被删除并重新创建为新文件,而 filter-branch 并没有这样做,但相比之下它也非常慢,而且我的存储库非常大,大约有 100000 次提交......
所以我正在尝试找出解决此问题的最佳方法。我应该在某些时候使用 BFG,并且简单地接受由于它的修改我会看到荒谬的拉取请求,或者我应该以某种方式使用 filter-branch 吗? 澄清一下,只有 3 个文件是造成这种不满的原因。
【问题讨论】:
-
如果要删除这些文件,则无法重写 git 历史记录。 Git 有一些其他工具可以处理大型存储库,您也许可以使用其中的一些。你可以使用
git clone --depth克隆一个 repo 的一部分。您还可以使用git clone --reference,使用本地存储库进行克隆以加快传输速度。注意--reference有一些非常特殊的边缘情况,所以在使用它之前仔细阅读它,以确定它是否是你想要的。 -
是的,我之前读过
git clone --depth和git pull --depth,但未能完全理解它们。如果我只提取这些肤浅的更改,这是否有助于我避免放置这些不再存在的大型历史文件? -
是的。 --depth 标志用于减少服务器上的负载,因此它不会下载给定深度的提交不需要的任何内容。如果您的大文件的历史比深度更早,它们将不会被下载。
-
听起来不错。我会尝试这样做,谢谢。
标签: git github git-filter-branch git-rewrite-history bfg-repo-cleaner