gpt4 book ai didi

git - 使用重写的 Git 存储库历史更新开发团队,删除大文件

转载 作者:IT王子 更新时间:2023-10-29 01:00:06 27 4
gpt4 key购买 nike

我有一个 git 存储库,里面有一些非常大的二进制文件。我不再需要它们,而且我不关心是否能够 check out 早期提交的文件。因此,为了减少存储库的大小,我想从历史记录中完全删除二进制文件。

在网络搜索之后,我得出结论,我最好的(唯一的?)选择是使用 git-filter-branch:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD

到目前为止,这看起来是个好方法吗?

假设答案是肯定的,我还有另一个问题要解决。 git manual has this warning :

WARNING! The rewritten history will have different object names for all the objects and will not converge with the original branch. You will not be able to easily push and distribute the rewritten branch on top of the original branch. Please do not use this command if you do not know the full implications, and avoid using it anyway, if a simple single commit would suffice to fix your problem. (See the "RECOVERING FROM UPSTREAM REBASE" section in git-rebase(1) for further information about rewriting published history.)

我们的服务器上有一个远程仓库。每个开发人员都会对其进行推送和 pull 。基于上面的警告(以及我对 git-filter-branch 工作原理的理解),我认为我无法运行 git-filter-branch在我的本地副本上,然后推送更改。

所以,我暂时打算完成以下步骤:

  1. 告诉我所有的开发人员提交、 push 并暂时停止工作。
  2. 登录服务器并在中央仓库上运行过滤器。
  3. 让每个人都删除他们的旧副本并从服务器重新克隆。

这听起来对吗?这是最好的解决方案吗?

最佳答案

是的,您的解决方案会奏效。您还有另一种选择:不是在中央存储库上执行此操作,而是在您的克隆上运行过滤器,然后使用 git push --force --all 将其推回。这将强制服务器接受来自您的存储库的新分支。这仅取代了第 2 步;其他步骤相同。

如果您的开发人员非常精通 Git,那么他们可能不必删除旧副本;例如,他们可以获取新的 Remote 并根据需要重新定位他们的主题分支。

关于git - 使用重写的 Git 存储库历史更新开发团队,删除大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444091/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com