从庞大的Git存储库中删除历史记录

布鲁图斯

我目前正在尝试减小Git存储库大小但遇到许多问题。

介绍

我有一个庞大而复杂的Git存储库,其中包含数千个提交和十多个分支。当前大小超过2 GB。

我想做的事

我想清理存储库历史记录,以尽可能减小其大小。我选择了一个特殊的提交,希望将其作为新的根提交(称为<NEW_ROOT>);我想之前删除每一个承诺 <NEW_ROOT>,并保留所有提交

我想保持唯一master,可能的话,develop 分支,其他分支应该从历史中删除,以减少大小。

在该过程结束时,我想将所有内容推送到remote,以便它仅保留更新的master和origin(基本上它必须反映我的本地情况)。

到目前为止我尝试过的

我浏览了很多网页,找到了很多解决方案,但是没有一个对我有用。特别是我认为这样的解决方案对我来说是完美的,不幸的是,在重新定基时我遇到了很多冲突

我也很努力,因为我发现许多解决方案都涉及过时的和过时的工具/选项(例如git filter-branch)。

你能帮我找到出路吗?

非常感谢!

恩里科·坎皮多里奥(Enrico Campidoglio)

这听起来像可以通过对本地大型存储库进行浅表克隆来实现

浅的存储库具有不完整的历史记录,其中一些提交已被父母淘汰。[...]当您仅对项目的最近历史感兴趣时,即使上游记录的真实历史要大得多,有时这也很有用。

这个想法是从您认为是新根的提交开始,将本地存储库浅克隆到一个新目录中请注意,该解决方案假定您只对在新存储库中保留一个分支感兴趣(例如master)。

你需要做的第一件事是创建一个分支引用指向<NEW_ROOT>现有存储库:

cd your-large-repo
git branch new-root <NEW_ROOT>^

我们将使用它new-root作为浅克隆的截止点。由于我们确实希望将其包括<NEW_ROOT>在新的存储库中,因此我们将截止点设置为其上级。当然,<NEW_ROOT>必须可以到达master

此时,您可以继续并将本地存储库克隆到一个新目录中,该目录指定:

  1. 您只对master分支感兴趣
  2. 您想排除所有可到达的提交new-root

这是完整的命令:

git clone --branch master --shallow-exclude=new-root file://C:\path\to\your-large-repo C:\path\to\your-new-repo

--shallow-exclude选项告诉Git排除导致new-root克隆之前(包括该克隆)的所有提交

现在,如果您cd进入your-new-repo,您会发现它仅包含master分支,并且根提交为<NEW_ROOT>

新的存储库将origin设置为file://C:\path\to\your-large-repo因此,在进一步操作之前,您必须将其替换为远程存储库的实际URL:

git remote set-url origin https://example.com/your-large-repo.git

此时,您可以简单地新历史记录强制推送到远程存储库(通常会对强制推送后果进行警告)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从git存储库中完全删除文件及其历史记录

来自分类Dev

从git历史记录中删除文件夹以减小存储库大小

来自分类Dev

从拆分存储库还原git历史记录

来自分类Dev

如何从历史记录中删除存储库中不再存在的文件的提交

来自分类Dev

合并缺少提交历史记录的git存储库到保留历史记录的存储库

来自分类Dev

合并缺少提交历史记录的git存储库到保留历史记录的存储库

来自分类Dev

清除XCode中存储库的历史记录列表

来自分类Dev

仅从单个分支而不是整个存储库中删除文件的历史记录

来自分类Dev

仅从单个分支而不是整个存储库中删除文件的历史记录

来自分类Dev

Pubnub-删除历史记录中的消息(存储)

来自分类Dev

如何将Git存储库历史记录重播到子目录中?

来自分类Dev

在git存储库的历史记录中查找大文件失败

来自分类Dev

从git历史记录中删除未使用的资产

来自分类Dev

如何从git历史记录中完全删除提交

来自分类Dev

从git历史记录中删除提交(永远)

来自分类Dev

Git-从历史记录中删除提交

来自分类Dev

从所有git历史记录中删除文件

来自分类Dev

从Git历史记录中删除大文件

来自分类Dev

Git-从分支的历史记录中删除文件

来自分类Dev

无法从Git历史记录中删除目录

来自分类Dev

从历史记录中删除git commit

来自分类Dev

从本地历史记录中删除git merge commit

来自分类Dev

从 git 历史记录中删除文件的某些内容

来自分类Dev

缺少删除文件历史记录中的行 (git)

来自分类Dev

从 git 历史记录中永久删除文件

来自分类Dev

仅将历史记录从CVS存储库导入到已创建的git存储库中

来自分类Dev

通过删除除“ foo”和“ bar”以外的所有文件来重写git存储库历史记录

来自分类Dev

从Mercurial存储库中删除不需要的历史记录的GB的最简单方法

来自分类Dev

将git存储库推送到具有历史记录的远程颠覆

Related 相关文章

  1. 1

    从git存储库中完全删除文件及其历史记录

  2. 2

    从git历史记录中删除文件夹以减小存储库大小

  3. 3

    从拆分存储库还原git历史记录

  4. 4

    如何从历史记录中删除存储库中不再存在的文件的提交

  5. 5

    合并缺少提交历史记录的git存储库到保留历史记录的存储库

  6. 6

    合并缺少提交历史记录的git存储库到保留历史记录的存储库

  7. 7

    清除XCode中存储库的历史记录列表

  8. 8

    仅从单个分支而不是整个存储库中删除文件的历史记录

  9. 9

    仅从单个分支而不是整个存储库中删除文件的历史记录

  10. 10

    Pubnub-删除历史记录中的消息(存储)

  11. 11

    如何将Git存储库历史记录重播到子目录中?

  12. 12

    在git存储库的历史记录中查找大文件失败

  13. 13

    从git历史记录中删除未使用的资产

  14. 14

    如何从git历史记录中完全删除提交

  15. 15

    从git历史记录中删除提交(永远)

  16. 16

    Git-从历史记录中删除提交

  17. 17

    从所有git历史记录中删除文件

  18. 18

    从Git历史记录中删除大文件

  19. 19

    Git-从分支的历史记录中删除文件

  20. 20

    无法从Git历史记录中删除目录

  21. 21

    从历史记录中删除git commit

  22. 22

    从本地历史记录中删除git merge commit

  23. 23

    从 git 历史记录中删除文件的某些内容

  24. 24

    缺少删除文件历史记录中的行 (git)

  25. 25

    从 git 历史记录中永久删除文件

  26. 26

    仅将历史记录从CVS存储库导入到已创建的git存储库中

  27. 27

    通过删除除“ foo”和“ bar”以外的所有文件来重写git存储库历史记录

  28. 28

    从Mercurial存储库中删除不需要的历史记录的GB的最简单方法

  29. 29

    将git存储库推送到具有历史记录的远程颠覆

热门标签

归档