我目前正在尝试减小Git存储库的大小,但遇到许多问题。
介绍
我有一个庞大而复杂的Git存储库,其中包含数千个提交和十多个分支。当前大小超过2 GB。
我想做的事
我想清理存储库历史记录,以尽可能减小其大小。我选择了一个特殊的提交,希望将其作为新的根提交(称为<NEW_ROOT>
);我想之前删除每一个承诺 <NEW_ROOT>
,并保留所有提交后。
我想保持唯一master
,可能的话,develop
分支,其他分支应该从历史中删除,以减少大小。
在该过程结束时,我想将所有内容推送到remote,以便它仅保留更新的master和origin(基本上它必须反映我的本地情况)。
到目前为止我尝试过的
我浏览了很多网页,找到了很多解决方案,但是没有一个对我有用。特别是我认为这样的解决方案对我来说是完美的,不幸的是,在重新定基时我遇到了很多冲突。
我也很努力,因为我发现许多解决方案都涉及过时的和过时的工具/选项(例如git filter-branch
)。
你能帮我找到出路吗?
非常感谢!
这听起来像可以通过对本地大型存储库进行浅表克隆来实现:
浅的存储库具有不完整的历史记录,其中一些提交已被父母淘汰。[...]当您仅对项目的最近历史感兴趣时,即使上游记录的真实历史要大得多,有时这也很有用。
这个想法是从您认为是新根的提交开始,将本地存储库浅克隆到一个新目录中。请注意,该解决方案假定您只对在新存储库中保留一个分支感兴趣(例如master
)。
你需要做的第一件事是创建一个分支引用指向父的<NEW_ROOT>
现有存储库:
cd your-large-repo
git branch new-root <NEW_ROOT>^
我们将使用它new-root
作为浅克隆的截止点。由于我们确实希望将其包括<NEW_ROOT>
在新的存储库中,因此我们将截止点设置为其上级。当然,<NEW_ROOT>
必须从可以到达master
。
此时,您可以继续并将本地存储库克隆到一个新目录中,该目录指定:
master
分支感兴趣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] 删除。
我来说两句